PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   query bringt mit WHERE xyz OR xyz zu viele ergebnisse (http://www.selfphp.de/forum/showthread.php?t=14582)

panametrics 15.09.2006 19:28:54

query bringt mit WHERE xyz OR xyz zu viele ergebnisse
 
Hallo,

ich arbeite an einem kleinen Rechtesystem für ein Forum.
Natürlich soll nicht jeder User jedes Forum sehen. Deswegen werden User in Gruppen eingeteilt, und Gruppen dann auf die ForenID´s berechtigt.

Funktioniert alles wunderbar, ist gut und toll. Natürlich soll auch bei einer Suche nicht einfach hingegangen werden und "Select * from discussion_postings WHERE [...]" gemacht werden, sondern auch hier die Rechtestruktur eingehalten werden. Ich möchte also nur Beiträge aus Foren die ich auch sehen darf.

Kein Thema, bekomm ich zu nem gewissen Teil noch hin.
Mein Problem: wenn ich die Query mit
"[...] WHERE cgu.nick='$nick' AND dp.message LIKE '%$suche%' ORDER BY [...]"
abschicke, und keine weitere WHERE Klausel einbaue funktioniert es. Mein Bauweg war aber danach noch ein "OR dp.message LIKE '%$suche%'" einzubauen.
Ab dem Zeitpunkt wo ich die Where Klausel um OR erweitere, bekomme ich zu viele Ergebnisse, eben halt von den Foren die ich nicht sehen dürfte. Hat wer ne Idee warum das so ist?

Hier beide Statements in voller Länge:

Das funktionierende:
Code:

SELECT * FROM community_groups_user AS cgu
  INNER JOIN `community_groups` AS cg ON cgu.group_id = cg.group_id
  INNER JOIN `discussion_access` AS da ON cg.group_id = da.group_id
  LEFT JOIN `discussion_topics` AS dt ON da.topic_id = dt.id_topic
  INNER JOIN `discussion_postings` AS dp ON da.topic_id = dp.id_topic
  WHERE
                  cgu.nick='$nick'
                  AND dp.message LIKE '%$suche%'
                  ORDER BY tmstamp DESC

Hier das NICHT funktionierende (es funktioniert Syntaxmäßig, nur eben falsche Ergenisse werden geliefert):
Code:

SELECT * FROM community_groups_user AS cgu
  INNER JOIN `community_groups` AS cg ON cgu.group_id = cg.group_id
  INNER JOIN `discussion_access` AS da ON cg.group_id = da.group_id
  LEFT JOIN `discussion_topics` AS dt ON da.topic_id = dt.id_topic
  INNER JOIN `discussion_postings` AS dp ON da.topic_id = dp.id_topic
  WHERE
                  cgu.nick='$nick'
                  AND dp.message LIKE '%$suche%'
                  OR dp.subject LIKE '%$suche%'
                  ORDER BY tmstamp DESC


Grüße: Tom

panametrics 15.09.2006 19:48:56

AW: query bringt mit WHERE xyz OR xyz zu viele ergebnisse
 
Wer lange genug probiert wird letzten Endes belohnt:

DIe Lösung sind Klammern, an die ich überhaupt nicht gedacht hab...

Code:

SELECT * FROM community_groups_user AS cgu
  INNER JOIN `community_groups` AS cg ON cgu.group_id = cg.group_id
  INNER JOIN `discussion_access` AS da ON cg.group_id = da.group_id
  LEFT JOIN `discussion_topics` AS dt ON da.topic_id = dt.id_topic
  INNER JOIN `discussion_postings` AS dp ON da.topic_id = dp.id_topic
  WHERE
                  cgu.nick='$nick'
                  AND (dp.message LIKE '%$suche%'
                  OR dp.subject LIKE '%$suche%')
                  ORDER BY tmstamp DESC



Alle Zeitangaben in WEZ +2. Es ist jetzt 22:36:50 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.