Verwendung von IN()
Mainhard
- php
Hallo,
ich will mittels einer SQL-Abfrage mir die Zeilen einer Tabelle anzeigen lassen, die in einer bestimmten Spalte mindestens einen der möglichen Werte stehen haben. Bisher habe ich es so versucht:
SELECT * FROM Kompetenz WHERE Leistung IN ('Mechanische Verfahren','Biologische Verfahren','Chemische Verfahren','Chem.-biol. Verfahren','Weitergehende Verfahren')
Das funktioniert nur wenn in der Spalte "Leistung" ein einziger Wert steht. Manche haben aber mehrere stehen. Diese Zeilen werden nicht angezeigt.
Die einzelnen Werte wurden mit diesem Befehl in die Datenbank übertragen, dabei handelte es sich um eine Abfrage, bei der man mehrere Werte ankreuzen konnte:
if (isset($_POST['Leistung'])) {
reset($_POST['Leistung']);
foreach ($_POST['Leistung'] as $k => $v){
$leistung = implode(',', $_POST['Leistung']);}}
Kann mir jemand sagen, wie ich IN() für meine Anwendung modifizieren kann oder ob es eine andere Abfragefunktion gibt ?
Hallo,
SELECT * FROM Kompetenz WHERE Leistung IN ('Mechanische Verfahren','Biologische Verfahren','Chemische Verfahren','Chem.-biol. Verfahren','Weitergehende Verfahren')
Das funktioniert nur wenn in der Spalte "Leistung" ein einziger Wert steht. Manche haben aber mehrere stehen.
Das ist eine schlechte Idee. Beseitige diesen Fehler.
Diese Zeilen werden nicht angezeigt.
Kann mir jemand sagen, wie ich IN() für meine Anwendung modifizieren kann oder ob es eine andere Abfragefunktion gibt ?
Es gibt zwar FIND_IN_SET(), aber ich rate Dir, ein vernünftiges Tabellendesign zu verwenden. Dein Stichwort lautet Normalisierung.
Freundliche Grüße
Vinzenz
Danke, ich werde den Fehler beseitigen.
Aber wie ?
Ich habe mir den text zur Normalisierung angesehen, aber das betrifft nicht mein Problem. Es soll nur abgefragt werden, ob einer der Werte in der Klammer von IN() in der Spalte "Leistung" vorkommt.
Hallo,
Danke, ich werde den Fehler beseitigen.
Ich habe mir den text zur Normalisierung angesehen, aber das betrifft nicht mein Problem.
sicher - oder ich habe Dich falsch verstanden.
Du schreibst:
Das funktioniert nur wenn in der Spalte "Leistung" ein einziger Wert steht. Manche haben aber mehrere stehen.
Ich interpretiere diese Aussage so:
wert | Leistung
------|---------------------------------------------
17 | Mechanische Verfahren, Biologische Verfahren
22 | Mechanische Verfahren
Du bekommst die zweite Zeile, aber nicht die erste.
Wenn in Spalte Leistung immer nur *genau ein* Wert steht - und das ist die erste Normalform, dann ist Dein Problem beseitigt. Also sorge dafür, dass in der Spalte Leistung immer nur ein Wert steht.
Freundliche Grüße
Vinzenz