mySQL und Like
Schnaps
- php
Hi
Ich habe hier eine SQL Anfrage, die auch so funktioniert,
$apoth_id="Select name
from linden_apotheken,linden_notdienst
where
linden_apotheken.id=linden_notdienst.apo_id
and
linden_notdienst.tag=$tag
and
linden_notdienst.monat=$monat
and
linden_notdienst.jahr=$jahr";
Nun hat sich aber eine Änderung ergeben und es kann sein das in der Tabelle linden_notdienst in der spalte apo_id auch noch ein * hinter der id ist.
Deshlab sollte dann ja die Zeile mit
linden_apotheken.id=linden_notdienst.apo_id
NIcht mehr matchen, ich habe nach dem Manuel die Zeile dann so umgeschrieben.
linden_apotheken.id like linden_notdienst.apo_id_
der -_ hinten dran steht doch für ein beliebiges Zeichen, oder?
Wird meine Abfrage so cnoh funktionieren oder íst das Falsch, ich habe es mal eben getestet und da ging es, ich weiß nur nicht ob es immer gehen wird damit?
MFG
Schnaps
Halihallo Schnaps
Nun hat sich aber eine Änderung ergeben und es kann sein das in der Tabelle linden_notdienst in der spalte apo_id auch noch ein * hinter der id ist.
Wie bitte? - Das muss doch anders lösbar sein, denn so ist es
wirklich eine Schnapsidee.
Deshlab sollte dann ja die Zeile mit
linden_apotheken.id=linden_notdienst.apo_id
Kann man diese unübersichtlichen [(/)code] Dinger nicht einfach
weglassen und den Code einrücken. Macht die Sache wesentlich
übersichtlicher. Ein Blick in die </faq/> verrät desweiteren,
dass dieser BB-Code nicht implementiert ist.
> linden\_apotheken.id like linden\_notdienst.apo\_id\_
> der -\_ hinten dran steht doch für ein beliebiges Zeichen, oder?
Nein, so wie du es hier schreibst, ist '\_' Bestandteil des
Attributnamens.
> Wird meine Abfrage so cnoh funktionieren oder íst das Falsch, ich habe es mal eben getestet und da ging es, ich weiß nur nicht ob es immer gehen wird damit?
Es wird so überhaupt nicht funktionieren, falls kein entsprechendes
Attribut namens 'apo\_id\_' in der Tabelle steht.
<http://www.mysql.com/doc/en/String_comparison_functions.html>
erklärt ganz eindeutig, wie der LIKE-Operator anzuwenden ist.
BTW: Warum "Schnapsidee": Ich habe keine Ahnung, was dieses '\*'
hinter einer ID bedeuten kann und halte es für absolut
unglücklich. Damit vernichtest du die sehr schnelle und performante
Behandlung von Integer-Werten, da das Attribut dann als String-Typ
deklariert werden muss; Stringvergleiche kosten im Normalfall mehr
Zeit als ein Integervergleich.
Natürlich kannst du in diesem Fall auch einen Index auf das Attribut
apo\_id legen und der LIKE Operator wird diesen sogar verwenden
können [1], dennoch halte ich dies für eine schlechte Lösung.
Vielleicht kannst du mich ja vom Gegenteil überzeugen: Was bringt
dieses '\*' hinter der ID? - Kann man dieses nicht in ein anderes
Attribut ausgliedern, sodass die ID als Integer-Wert stehen bleiben
kann?
[1] Ein LIKE "test\_" kann den Index benutzen,
Ein LIKE "\_test" jedoch schon nicht mehr => wird langsam.
Viele Grüsse
Philipp