2017-05-04 2 views
0

Ich brauche deine Hilfe. Ich arbeite an einem kleinen Plugin für einige E-Mail-Überprüfungen in Wordpress und jetzt struggeling.Wordpress SQL-Anfrage mit Daten aus Array in WHERE-Klausel

Ich mag ein Array von IDs bekommen, und ich bekomme sie durch folgenden Code:

function myFuntion() { 
     global $wpdb; 
     $supporterIDArray = $wpdb->get_results("SELECT id FROM myTable WHERE value = 'true' AND field_id = 1"); 
    } 

Jetzt bekomme ich eine Reihe von einer unbekannten Anzahl von IDs wie [7, 9, 34, 53, .. .]

Danach möchte ich zählen, wie viele andere Zeilen diese ID haben. Aber ich weiß nicht, wie das zu tun, könnte die shold so sein ...

global $wpdb; 
$countSupporters = $wpdb->get_results("SELECT COUNT(*) AS allSupporter FROM myTable WHERE value = 'true' AND field_id = '2' AND `id` = **THESE IDS FORM THE ARRAY**"); 
echo $countSupporters -> allSupporter; /*Number of all ROWs which have an ID wich was in the array 

Ich hoffe, ich erklärte es gut genug und wäre so dankbar, wenn ihr mir helfen könntet. Vielen Dank!

Antwort

0

Sie wollen das IN Stichwort:

$countSupporters = $wpdb->get_results(" 
    SELECT 
     COUNT(*) AS allSupporter 
    FROM 
     myTable 
    WHERE 
     value = 'true' AND 
     field_id = '2' AND 
     id IN (1, 2, 3, 4, 5) 
"); 

Sie benötigen Ihre Array als durch Kommata getrennte Liste zu formatieren. Normalerweise würden Sie dazu join(',', $list) verwenden, aber Sie sollten auf SQL-Injektionen achten und ich bin nicht vertraut genug mit dem WordPress-Abfragesystem, um zu wissen, wie sie damit umgehen.

0

Versuchen Sie folgendes:

$array = implode(",",$your_array); 
$countSupporters = $wpdb->get_results("SELECT COUNT(*) AS allSupporter FROM myTable WHERE value = 'true' AND field_id = '2' AND id IN (".$array.")"); 
+0

Vielen Dank für Ihre Antwort! Ich habe es versucht, aber es gibt mir einen Fehler: "Catalable fatal error: Objekt der Klasse stdClass konnte nicht in String umgewandelt werden in ..." –

+0

Sie implodieren das Array zuerst? Ich habe eine Bearbeitung vorgenommen, können Sie es erneut versuchen? – shazyriver

+0

Sorry für die späte Antwort. Ich habe das gleiche Problem wie zuvor. Ich fand jetzt einen anderen Weg mit einer foreach-Schleife und einem Zähler ... Es ist kein sehr effizienter Weg, aber es funktioniert und es ist nicht eine große Anzahl von Anfragen ... Danke trotzdem! –

Verwandte Themen