db_abfrage, bei dem die werte NULL sein können
cora
- datenbank
ich mache eine ahnendatenbank. nun möchte ich auf dieser datenbank nach verschiedenen kriterien/feldern suchen.
mein problem: in den feldern, nach denen ich suche, steht unter umständen NULL und genau diese datensätze werden nicht angezeigt.
name vater
aaa1 hans
aaa2 NULL
vereinfachtes beispiel:
SELECT * FROM stammbaum WHERE name LIKE "%aaa%"
--> erhalte ich meine beiden datensätze
SELECT * FROM stammbaum WHERE name LIKE "%aaa%" AND vater LIKE "%%"
--> hier möchte ich auch beide datensätze, erhalte aber nur einen.
die beiden variablen name + vater werden mit hilfe von variablen jedes mal übergeben.
muss ich alle NULL werte vom vater wirklich in leere werte umwandeln, oder gibt es auch eine andere möglichkeit für meine SELECT-abfrage?
Hi,
vereinfachtes beispiel:
SELECT *
ich hoffe inständig, das "*" ist Teil der Vereinfachung.
[...] LIKE "%aaa%"
Dass dies so ziemlich die mit Abstand ineffizienteste Methodik der Prüfung ist, ist Dir bewusst? Du machst es praktisch unmöglich, einen Index zu verwenden.
SELECT * FROM stammbaum WHERE name LIKE "%aaa%" AND vater LIKE "%%"
Dies schließt alle Datensätze, die keinen anstatt einem leeren Wert besitzen, aus.
muss ich alle NULL werte vom vater wirklich in leere werte umwandeln,
Selbstverständlich nicht. Du kannst sowohl Werte auf NULL überprüfen, als auch Oder-Verknüpfungen einsetzen.
Cheatah
echo $begrüßung;
[...] vater LIKE "%%"
Was bitte bezweckst du mit diesem Ausdruck? 0 bis beliebig viele Zeichen gefolgt von 0 bis beliebig vielen Zeichen. Bei zwei aufeinanderfolgenden % ist eins überflüssig und ein einzelnes % als Suchbedingung macht die ganze Suchbedingung obsolet.
muss ich alle NULL werte vom vater wirklich in leere werte umwandeln, oder gibt es auch eine andere möglichkeit für meine SELECT-abfrage?
Ein Ausdruck, der einen NULL-Wert enthält kann per Definition nie erfolgreich sein. Es sei denn, man verwendet den speziellen Operator IS, der auf NULL testen kann.
echo "$verabschiedung $name";