Problem mit Abfrage - Ausgabe ist falsch

drella

Mitglied
Hallo,

ich habe eine Suche, bei der ich ausd zwei Tabellen die Daten benötige:

Tabellen:

project und customer


hier meine query:

Code:
SELECT DISTINCT p.id, p.customer_id, p.website, p.note, p.name, c.group_id
FROM project p, customer c 
WHERE c.group_id = '1' AND(c.company LIKE '%KEYWORD%' OR c.person LIKE '%KEYWORD%' OR p.name	LIKE '%KEYWORD%' OR p.website LIKE '%KEYWORD%' OR p.note LIKE '%KEYWORD%') 
ORDER BY p.name


wenn ich jetzt nach einem KEYWORD wir zB "huhu" suche, dass in einem datensatz in der tabelle "customer" einmal vorkommt, werden alle datensätze ausgegeben

habe ich einen denkfehler drin ich verstehe es einfach nicht!?

danke für jede hilfe

grüße
andré
 
Dein impliziter JOIN verknüpft ohne Einschränkung jeden Datensatz der einen Tabelle mit jedem Datensatz der anderen Tabelle. Daher erhältst Du alle Projekte, wenn die Bedingungen nur bei einem Kunden zutreffen.
Ich bevorzuge den expliziten JOIN, der Dich auch nötigt, dass Du Dir Gedanken über die Verbindung zwischen den Tabellen machst:
Code:
SELECT DISTINCT
  p.id, 
  p.customer_id, 
  p.website, 
  p.note, 
  p.name, 
  c.group_id
FROM customer c 
JOIN project p
  ON c.id=p.customer_id
WHERE c.group_id = '1' 
  AND (c.company LIKE '%KEYWORD%' 
    OR c.person  LIKE '%KEYWORD%' 
    OR p.name    LIKE '%KEYWORD%' 
    OR p.website LIKE '%KEYWORD%' 
    OR p.note    LIKE '%KEYWORD%') 
ORDER BY p.name
Warum projezierst Du eigentlich die c.group_id? Die ist doch bekannt, wenn Du sie in der WHERE-Klausel aufnimmst.

Gruß hpvw
 
hi hpvw,

danke erstmal für deine hilfe.

so funktioniert es fast. komischerweise findet er manche datensätze einfach nicht? hab aber noch nicht herausgefunden welche genau... bzw wieso gerade diese?!

zB

es gibt zwei "company" inhalte die gleich anfangen "bav" - die "id_group" passt auch - aber einen von beiden findet er nicht
Code:
$query = "SELECT DISTINCT
  p.id, 
  p.customer_id, 
  p.website, 
  p.note, 
  p.name,
  c.company,
  c.person
FROM customer c 
JOIN project p
ON c.id = p.customer_id
WHERE c.group_id = '1' 
AND (c.company LIKE '%".$_GET['keyword']."%' 
OR c.person  LIKE '%".$_GET['keyword']."%' 
OR p.name    LIKE '%".$_GET['keyword']."%' 
OR p.website LIKE '%".$_GET['keyword']."%' 
OR p.note    LIKE '%".$_GET['keyword']."%') 
ORDER BY p.name";



aja, ich hatte die id_group zu testzwecken drin.. hab ich jetzt auch rausgenommen.

viele grüße
andré
 
Haben diese Customer denn auch ein Projekt?
Wenn nicht, dann mache statt einem JOIN einen LEFT JOIN.

Gruß hpvw
 
Zurück