Schnaps: mySQL und Like

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

  1. 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