Anschinsan: Fehler in SELECT - aber Welcher?

Hallo Experten,

In folgender SELECT Klausel muss ein Fehler sein:

SELECT events. * , short_content. *
FROM events LEFT JOIN short_content ON ev_content_id = sc_id
WHERE ev_limit >= '20050912'
OR ev_limit = '0'
AND ev_lang = 'es'
AND ev_web = '0'
OR ev_web LIKE '%1%'
AND sc_aktiv = '1'
ORDER BY ev_date ASC
LIMIT 0 , 30

Die Suche "AND ev_web = '0'OR ev_web LIKE '%1%'" liefert mir ein falsches Ergebnis - nämlich einen Datensatz, bei welchem in der Spalte 'ev_web' nur eine 2 eingetragen ist.

Habe ich einen Fehler in der Syntax den ich nicht entdecke? Weiß jemand einen guten Link zum Thema 'Suche mit MySql' ausser dem MySQL Manual? Ich bitte um Hilfe.

Mit freundlichen Grüßen
Anschinsan

  1. Hi.

    Du holst alle Datensätze aus short_content und joinst diese dann nochmal? Entweder nimmst du short_content.* raus (müsste eh im from-Statement nochmal mit angegeben werden), oder so:

    SELECT *
    FROM events LEFT JOIN short_content ON short_content.ev_content_id = events.sc_id
    WHERE ev_limit >= '20050912'
    OR ev_limit = '0'
    AND ev_lang = 'es'
    AND ev_web = '0'
    OR ev_web LIKE '%1%'
    AND sc_aktiv = '1'
    ORDER BY ev_date ASC
    LIMIT 0 , 30

    Gruß,
    Chriz

    1. Hallo Chriz,

      danke - hmm - aber das wars nicht. Habs gerade nochmal probiert, völlig ohne short_content. Das beeinflusst aber das Ergebnis nicht. Der Fehler muss irgendwo bei der Suche liegen - in dieser Zeile:

      ev_web = '0' OR ev_web LIKE '%1%'

      Das Ergebnis ist so, als würde diese Anweisung (ev_web LIKE '%1%') völlig ignoriert.

      mfg
      Anschinsan

    2. Hi...

      Ich sehe gerade, dass die ANDs und ORs recht wild sind. Du solltest die Anweiseungen mit Klammern zuorden. Ich kenne zwar die Tabellenstruktur nicht, aber ich versuche es mal :)

      SELECT *
      FROM events LEFT JOIN short_content ON short_content.ev_content_id = events.sc_id
      WHERE (ev_limit >= '20050912' OR ev_limit = '0') AND (ev_lang = 'es'
      AND (ev_web = '0' OR ev_web LIKE '%1%')) AND sc_aktiv = '1'
      ORDER BY ev_date ASC
      LIMIT 0 , 30

      Gruß,
      Chriz

      1. Das wars ;) Vielen Dank

        Anschinsan