MySQL SELECT WHERE IN LISTE und NICHT IN LISTE in der gleichen SQL
Habe ich dieses:
$ids = "1,2,3,4,5";
$sqlQuery = "SELECT id, moderation_date
FROM table_live
WHERE id IN (".$ids.")";
$q = $this->CI->db->query($sqlQuery);
if($q->num_rows() > 0) {
foreach ($q->result() as $row) {
$arr[] = $row;
}
}
return $arr;
Dies ist nur gut funktioniert, wenn alle ids existieren in table_live
und zurück
array([id] => 1 [moderation_date] => 2012-04-11 12:55:57)....
Das problem: Wenn ich sende eine Liste von ids 1-2-3-4-5 wo nur 1-2-5 entsprechen, die IN der LISTE Klausel
Ich muss, um alle in der Liste und für diejenigen, die nicht mit der Liste ein null-Wert.
array([id] => 3 [moderation_date] => null)
- Bitte geben Sie sample-Daten und die gewünschte Ausgabe.
- wenn alle nicht-vorhandenen ids haben
moderation_date
alsNULL
Sie können es verwenden, während die Zuordnung der$arr[]
Du musst angemeldet sein, um einen Kommentar abzugeben.
generieren, die eine outer join-Anweisung, so dass Sie bekommen:
wo die ids ist eine Unterabfrage auflisten der Werte, so etwas wie dieses:
sicher, dass Sie
ids.id
, nichttable_live.id
. So, die ids werden immer angezeigt, und die moderation_date nur, wenn die entsprechende Zeile existiert in table_live.Ein anderer Ansatz wäre, zu halten, die Abfrage als Sie es hatte, Speichere das Ergebnis in ein array, und dann Zusammenführen der arrays in php, so dass Sie bleiben alle Tasten und füllen Sie die Werte nur, wo der Schlüssel passt in die beiden arrays.
Ich bin nicht wirklich sicher, welche Art von db-library du verwendest, also ich weiß nicht, wie Sie ein array der Ergebnismenge enthalten ist, aber angenommen, Sie würden gespeichert haben, werden die Zeilen in ein php-array in einen string, der die id als Schlüssel und das Datum als Wert, dann sollte dieser code funktionieren:
finden Sie unter: http://php.net/manual/en/function.array-merge.php