Abfragen, ob Inhalte in Spalten
Georg Braun
- datenbank
0 max0 Georg Braun0 max
0 Vinzenz Mai
Hallo,
einfaches Problem: In Tabelle A sind die Spalten A, B, C, D.
A = fortl. Index
B = Oberkategorie
C = Einträge zu B
D = Personal-Nummer
Zu D = 5 soll festgestellt werden, ob in B = 2 Einträge in C vorhanden sind. Die Einträge sollen/ brauchen nicht selektiert zu werden. Es soll nur ein einfaches ja oder nein festgestellt werden.
Ansatz:
Select c from a where d = 5 and and b = 2 limit 1
Gibt es eine bessere/ schnellere Methode, die Problemstellung zu meistern? Ist select count(*) ein besserer Ansatz? Wie arbeitet limit? Werden alle Datensätze abgearbeitet und anschließend limitiert, oder wird die Verarbeitung beim ersten gefundenen abgebrochen?
hey,
ich vermute du suchst folgendes:
$query=mysql_query("select * from c where d=5 and and b=2");
$anzahl=mysql_num_rows($query);
wenn jede personalnummer nur einmal auftaucht würde es auch mit mysql_affected_rows()==1 gehen.
limit sorgt lediglich dafür, dass nur eine bestimmte anzahl von einträgen geliefert werden soll (zb. die 10 neuesten).
hoffe das hat weitergeholfen.
max
hey,
ich vermute du suchst folgendes:$query=mysql_query("select * from c where d=5 and and b=2");
$anzahl=mysql_num_rows($query);wenn jede personalnummer nur einmal auftaucht würde es auch mit mysql_affected_rows()==1 gehen.
limit sorgt lediglich dafür, dass nur eine bestimmte anzahl von einträgen geliefert werden soll (zb. die 10 neuesten).
hoffe das hat weitergeholfen.
max
Nein, genau das nicht. Das liefert alle vorhandenen DS. Ich will gar keinen. Ich will nur wissen, ob es welche zu d=5 und b=2 gibt. Limit 1 ist ein Kompromiß, die Auswahl zumindest auf einen zu beschränken. Mehr braucht man nicht, um die Frage zu bejahen.
wie wärs mit
if(mysql_affected_rows()<=1){}
in verbindung mit dem genannten query?
wie wärs mit
if(mysql_affected_rows()<=1){}
in verbindung mit dem genannten query?
Hallo Max,
ist nett von Dir, aber ich glaube, Du kannst mir nicht helfen. mysql_affected_rows() liefert für select gar kein Ergebnis, siehe http://www.phpcenter.de/de-html-manual/function.mysql-affected-rows.html
Trotzdem Danke (ist ehrlich gemeint!).
Hallo Georg,
Select c from a where d = 5 and and b = 2 limit 1
Gibt es eine bessere/ schnellere Methode, die Problemstellung zu meistern?
Teste mit EXPLAIN, ob Deine Abfrage oder
SELECT
COUNT(*)
FROM A
WHERE D = 5
AND B = 2
schneller ist
Wie arbeitet limit? Werden alle Datensätze abgearbeitet und anschließend limitiert, oder wird die Verarbeitung beim ersten gefundenen abgebrochen?
Soweit ich mich erinnere, kann LIMIT eine Performance-Bremse sein, wenn man
es nicht benötigt :-) Befrage EXPLAIN.
Um das ganze auf ja / nein zu bringen, solltest Du noch IF einbauen:
SELECT
[link:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if@title=IF](COUNT(*) > 0, 'ja', 'nein') AS ergebnis
FROM A
WHERE D = 5
AND B = 2
Ja, ja! Mir ist schon klar, dass Du wahrscheinlich nicht die Werte 'ja' und
'nein' haben möchtest :-)
Freundliche Grüße
Vinzenz