Anzahlnodes mit bestimmten Feld
Eingetragen von JenneMander (112)
am 27.03.2014 - 11:55 Uhr in
am 27.03.2014 - 11:55 Uhr in
Hallo Drupalcommunity,
ich möchte gerne via db_query herausbekommen wieviele Nodes mit einem bestimmten Inhalt ich habe. Dabei gelingt es mir leider nicht mit dem folgenden Code:
SELECT count(n.field_md_value) FROM {field_data_field_md} n WHERE n.field_md_value ='".$value."'"
Vielleicht kann mir von euch jemand helfen.
mit bestem Dank
Jenne
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi Jenne
am 27.03.2014 - 12:11 Uhr
ist n.field_md_value ein VARCHAR Datentyp (wegen den Anführungszeichen)?
Gibt es eine Fehlermeldung schmal inm PHP log und Watchdog nach?
Eines noch, wenn Du diesen Query so aufrufst:
SELECT count(n.field_md_value) FROM {field_data_field_md} n WHERE n.field_md_value ='".$value."'"
bekommst Du mit fetch_object $row->count(n.field_md_value) als object zurück
mit fetch_array $row['count(n.field_md_value)'] als array.
Ich glaube das Objekt echo $row->count(n.field_md_value); kannst Du in PHP nicht so verwenden.
Als Array funktioniert es echo $row['count(n.field_md_value)']; .
Besser ist Du gibst auch count einen Alias:
SELECT count(n.field_md_value) AS cnt FROM {field_data_field_md} n WHERE n.field_md_value ='".$value."'"
Dann bekommst Du $row->cnt; (fetch_object) oder $row['cnt'] (fetch_array).
LG
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
nutze db_query
am 27.03.2014 - 12:24 Uhr
Du hast da einen SQL Select Befehl, aber kein db_query!
Bsp-Code:
<?php
$uid = 1;
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid', array(':uid' => $uid));
// Result is returned as a iterable object that returns a stdClass object on each iteration
foreach ($result as $record) {...
?>
Du musst einen join machen wegen der Felder mit dem gesuchten Typ, wenn Du von {node} ausgehst. Oder Du gehst direkt auf die Tabelle des Feldes, also von mir aus {field_data_field_bla} und lädst die alle.
dann in der foreach setzt Du einen counter, bspw.:
<?php
$counter =0;
foreach(){
...
$counter = $counter +1; // Geht auch schöner aber so versteht man es auch.
}
?>
Dann hast Du nachher die Anzahl der rows drin = Anzahl der nodes mit dem Feld.
PS: Aus didaktischen Gründen:
statt $uid stelle Dir $value vor!
PPS: Drupal way wäre entityfieldquery, ist am einfachsten. Da wurde auch in der KLasse direkt eine count Methode eingebunden.
$count = $query->count()->execute();
ja sorrie, ich schreibe
am 28.03.2014 - 06:53 Uhr
ja sorrie, ich schreibe db_query(...), ich probiere gleich mal alles aus.
Also am einfachsten scheint da wirklich die Klasse EntityFieldQuery zu arbeiten:
hier meine Lösung:
[code]
$query = new EntityFieldQuery();
$query -> entityCondition('entity_type','node')
->fieldCondition('field_md_uuid','value',$uuid,'=');
$result = $query->count()->execute();
[/code]
mit bestem Dank
Jenne
gerne!
am 28.03.2014 - 08:31 Uhr
gerne!