SQL JOIN two tables with one-to-many associative array?

Go To StackoverFlow.com

1

I'm relatively new SQL queries, and I'm trying to join two tables in order to get a nice data set, but have been having some issues. I've tried two:

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'

and

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'

Neither of which work and both of which illustrate my relative inability to make a nice SQL statement :)

Basically, one of the tables wp_rg_lead contains a form id wp_rg_lead.id which relates to the second table wp_rg_lead_detail via wp_rg_lead_detail.lead_id.

I basically want to get wp_rg_lead.created_by and associate that with the many wp_rg_lead_detail.field_number and their associated wp_rg_lead_detail.value. This has to be based on wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved'

Basically I'd like to end up with a nice array that would end up looking something like:

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

But I have no idea how to construct a SQL statement in order to associate the field_number and value. Do I need to construct two different statements and UNITE them?

In the end, I would love to be able to do a count() on the array and have it only return the number of entries based on the 'Approved' status. My second query results in 208 or something.

I'd appreciate any help trying to get this query working. This is beyond what I understand right now.

Thanks a ton!

Tre

2012-04-04 21:48
by tr3online
It looks to my like your queries should work (I looked at the second one more closely, but they both seem fine). What is wrong with the result set they are giving you - Kevin 2012-04-04 21:59


0

If I understand what you are saying, you are after a cross-tab query result. There are a few good pointers on dynamic cross tab queries here

If you can handle limiting your "field number" columns to a set group then a query like this may work:

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'

(got the last bit from your example, modify as necessary)

2012-04-04 22:13
by Dan
I'll take a look at this. I've never played with it before. Mostly I want to grab field = 1, 2, 3, 4, 5, ... and their associated valuetr3online 2012-04-05 01:27
This seems to be more for summation, no - tr3online 2012-04-05 01:32
a more to the point graphic representation via a google doc : https://docs.google.com/spreadsheet/ccc?key=0Aul-UWQVna5mdEI1aWp0dmZTTHMwQnM1LW00NjFLY2c . I would love to be able to associate the two tables based on the id's and attach all the field_number and its associated value with the id from the opposite table (and some other data - tr3online 2012-04-05 01:42
@tr3online based on our last comment your second SQL statement should do the job. what is wrong with the output you are getting - Dan 2012-04-05 03:42
Ads