Philipp Hasenfratz: mySQL und Like

Beitrag lesen

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