Mailinglisten-Archive |
> Hallo Liste! Hallo Florian, > Gegeben sei eine einfache Tabelle 'test' mit der einzigen > Spalte 'id', Werte seien 1, 3, 5. > > Die Aufgabe: Ich habe eine Liste von IDs (1,2,3,4,5) und > suche nun die IDs, die _nicht_ in der Tabelle vorkommen. > Andersrum ist das ja ganz einfach: 'SELECT id FROM test WHERE > id IN (1,2,3,4,5)' > > Was ich suche, ist ein Ausdruck, der mir jetzt in einer > Abfrage folgendes Ergebnis liefert: 2,4 In Deiner Variante kann es nicht funtionieren, denn die Datensätze mit den ID's 2 und 4 gibt es in der Tabelle nicht. Und da die Datensätze nicht "physikalisch" vorhanden sind, kannst Du diese auch nicht zurückgeben lassen. Was man machen kann ist, zwei Indexspalten zu produzieren: id INT id_check INT Sagen wir id ist Autoincrement, dann sorgst Du manuell beim Einpflegen eines Datensatzes dafür, dass id_check = id wird. Wenn Du nun im Laufe Deiner Arbeit mit der Tabelle zu einem Punkt kommst, an dem Du eigentlich Datensätze löschen möchtest, löschst Du diese nicht wirklich, sondern machst ein Update auf id_check mit der Zahl 0. Deine Tabelle von oben würde dann so aussehen: id id_check 1 1 2 0 3 3 4 0 5 5 Und um jetzt alle ID's zu erwischen, die eigentlich gar nicht mehr vorhanden sind, brauchst Du nur noch [..] WHERE id_check = 0 oder wahlweise [..] WHERE id != id_check ... was aufs gleiche raus kommt. Aber Du bekommst 2 und 4 :-) Ggf. reicht auch eine Spalte "geloescht" mit 0/1... Ich weiß zwar nicht, wofür Du das brauchst, aber so würde es zu machen sein. Wenn Du diese Problematik bei der Verknüpfung zweier Tabellen hast, würde ich aber noch mal anders vorgehen. Liebe Grüße Tim
php::bar PHP Wiki - Listenarchive