2012-04-04 15 views
1

Ich bin relativ neue SQL-Abfragen, und ich versuche, zwei Tabellen zu verbinden, um einen schönen Datensatz zu bekommen, hatte aber einige Probleme. Ich habe zwei versucht:SQL JOIN zwei Tabellen mit eins-zu-vielen assoziativen Array?

SELECT wp_rg_lead.id, wp_rg_lead.created_by, wp_rg_lead_detail.field_number, wp_rg_lead_detail.value 
FROM wp_rg_lead, wp_rg_lead_detail 
WHERE wp_rg_lead.id = wp_rg_lead_detail.lead_id AND wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved' 

und

SELECT wp_rg_lead.id, wp_rg_lead.created_by, wp_rg_lead_detail.field_number, wp_rg_lead_detail.value 
FROM wp_rg_lead 
INNER JOIN wp_rg_lead_detail 
ON wp_rg_lead.id = wp_rg_lead_detail.lead_id 
WHERE wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved' 

von denen keine Arbeit und beide, die meine relative Unfähigkeit zeigen eine schöne SQL-Anweisung zu machen :)

Grundsätzlich eine der Tabellen wp_rg_lead enthält eine Formular-ID wp_rg_lead.id, die sich auf die zweite Tabelle wp_rg_lead_detail über wp_rg_lead_detail.lead_id bezieht.

Ich möchte grundsätzlich wp_rg_lead.created_by bekommen und assoziiere das mit den vielen wp_rg_lead_detail.field_number und deren zugehörigen wp_rg_lead_detail.value. Dies muss, basierend auf wp_rg_lead.form_id = '9' UND wp_rg_lead.payment_status = 'Approved'

Grundsätzlich würde Ich mag mit einem schönen Array, um am Ende, das wie die Suche nach etwas enden würde:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 301 
      [created_by] => 213 
      [field_number(1)] => [value(1)] 
      [field_number(2)] => [value(2)] 
      [field_number(3)] => [value(3)] 
      ... 
     ) 
    ... 
) 

Aber ich habe keine Ahnung, wie eine SQL zu konstruieren Anweisung, um die field_number und value zuordnen. Muss ich zwei verschiedene Aussagen konstruieren und sie VEREINIGEN?

Am Ende würde ich gerne ein count() auf dem Array tun können und es nur die Anzahl der Einträge basierend auf dem Status "Genehmigt" zurückgeben. Meine zweite Abfrage ergibt 208 oder so.

Ich würde mich über jede Hilfe freuen, die versucht, diese Abfrage zum Laufen zu bringen. Das ist jenseits dessen, was ich gerade jetzt verstehe.

Vielen Dank!

Tre

+0

Es sieht so aus, als ob deine Fragen funktionieren sollten (ich habe mir die zweite näher angesehen, aber beide scheinen gut). Was ist falsch an der Ergebnismenge, die sie dir geben? – Kevin

Antwort

0

Wenn ich verstehe, was Sie sagen, Sie sind nach einer Kreuztabelle Abfrageergebnis. Es gibt ein paar gute Hinweise auf dynamische Kreuztabellen-Abfragen here

Wenn Sie behandeln können Ihre „Feldnummer“ Spalten zu einer Satzgruppe dann eine Abfrage wie diese Begrenzung kann funktionieren:

SELECT 
    [ID], 
    [CREATED_BY], 
    [FIELD_NUMBER1] = SUM(CASE WHEN [FIELD_NUMBER] = 'FIELD_NUMBER1' THEN [FIELD_VALUE] ELSE 0 END), 
    [FIELD_NUMBER2] = SUM(CASE WHEN [FIELD_NUMBER] = 'FIELD_NUMBER2' THEN [FIELD_VALUE] ELSE 0 END) 
.... 
FROM wp_rg_lead 
INNER JOIN wp_rg_lead_detail 
ON wp_rg_lead.id = wp_rg_lead_detail.lead_id 
WHERE wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved' 

(bekam die letzte Bit aus deinem Beispiel, ändere es wenn nötig)

+0

Ich schaue mir das an. Ich habe noch nie damit gespielt. Meistens möchte ich 'Feld = 1, 2, 3, 4, 5, ...' und ihren zugehörigen 'Wert' nehmen – tr3online

+0

Das scheint mehr für die Summierung zu sein, nein? – tr3online

+0

eine mehr auf den Punkt grafische Darstellung über ein Google-Dokument: https://docs.google.com/spreadsheet/ccc?key=0Aul-UWQVna5mdEI1aWp0dmZTTHMwQnM1LW00NjFLY2c. Ich würde gerne in der Lage sein, die beiden Tabellen basierend auf den IDs zuordnen und fügen Sie alle Feldnummer und den zugehörigen Wert mit der ID aus der gegenüberliegenden Tabelle (und einige andere Daten) – tr3online