Tom: Join Optimieren

Hallo zusammen,

ich möchte aus meiner Kundenliste "tabelle" nur die Kundendaten Selecten die unter den bestellten Produkten "tabelle1" bei Zahlung auf 'm' stehen ...

so siehts bei mir aus:

$data = mysql_query ( "
 SELECT *
 FROM tabelle,tabelle1
 WHERE tabelle1.zahlung='m'
");

Die Abfrage bringt mir jetzt zwar nur die Kunden aus die den gewünschten Status haben, allerdings wenn in "tabelle1" mehrere Produkte auf einen Kunden laufen vervielfacht sich das Ergebniss
und ich brauche ja nur die Kundendaten und nicht die Produkte;(

ich lese den query so aus:

while( $row = mysql_fetch_array($data) ){
   echo "$row[client_id]<br>";
 }

ich habe da mal etwas in der art gesehen aber leider keine Infos dazu gefunden "$row[$row[1]]"

kann es sein das der query von mir schon die Daten enthält, ich sie aber falsch auslese?

Oder habe ich die Abfrage völlig falsch gestellt?
Wenn ja sagt mir bitte wies richtig geht ;)

Ich danke für eure Hilfe ...

Viele Grüsse

Tom

  1. ich möchte aus meiner Kundenliste "tabelle" nur die Kundendaten Selecten die unter den bestellten Produkten "tabelle1" bei Zahlung auf 'm' stehen ...

    $data = mysql_query ( "
    SELECT *
    FROM tabelle,tabelle1
    WHERE tabelle1.zahlung='m'
    ");

    Moin Tom,

    bevor Du wie im Thread-Titel an die Optimierung des Joins denken kannst, mußt Du diesen erst einmal herstellen:

    SELECT ku.id,ku.blahblahundsoweiter
          FROM tabelle ku,tabelle1 za
          WHERE (ku.id = za.idku) AND (za.zahlung = 'm')
          GROUP BY 1

    Annahme: idku sei in tabelle1 die Spalte, die die ID des Kunden aus tabelle enthält (sinnvollere Tabellennamen wären cool).

    Die Abfrage bringt mir jetzt zwar nur die Kunden aus die den gewünschten Status haben,

    Mit dem von Dir zitierten SELECT bezweifle ich das - es sei denn, alle Kunden hätten den gewünschten Status.

    allerdings wenn in "tabelle1" mehrere Produkte auf einen Kunden
    laufen vervielfacht sich das Ergebniss

    Weil Du ohne Join-Bedingung ein Kreuzprokukt der beiden Tabellen herstellst.

    ich habe da mal etwas in der art gesehen aber leider keine Infos dazu gefunden "$row[$row[1]]"

    ?

    HTH Robert

    1. $data = mysql_query ( "
      SELECT *
      FROM tabelle,tabelle1
      WHERE tabelle1.zahlung='m'
      ");

      Die Abfrage bringt mir jetzt zwar nur die Kunden aus die den gewünschten Status haben,

      Mit dem von Dir zitierten SELECT bezweifle ich das - es sei denn, alle Kunden hätten den gewünschten Status.

      Der Zweifel bleibt, aber sonst habe ich da Unsinn geschrieben: Du hast ja eine WHERE-Bedingung; damit stellst Du ein unvollständiges Kreuzprodukt her (ohne die zahlung='m'-Sätze auf der tabelle1-Seite, Du kombinierst aber jeden Kundensatz mit allen anderen Sätzen auf der tabelle1-Seite).

      HTH Robert