phpbar.de logo

Mailinglisten-Archive

[php] MySQL: Welche ID fehlt?

[php] MySQL: Welche ID fehlt?

Tim TConnect at gmx.net
Fre Apr 13 16:16:05 CEST 2007


> 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