Question

I have trying to do a SELECT query....not an UPDATE or INSERT or DELETE.

I have three tables.

  • The customers table
  • The invoices table
  • The invoice_items table

I want to run a query that will show me every invoice. Each invoice can have only ONE customer and MANY items...hence the existence of invoice_items

My current query looks like this

SELECT i.order_date, c.name, thedata.info from invoices i inner join customers c ON (i.customer = c.id) right join ( select x.order, group_concat( concat(x.itemname,' ', x.itemdesc) separator "\n" ) as info from invoice_items x ) thedata on (i.id = thedata.order)

When I run this query, I receive one row that contains, one customer, one invoice, and a list of any an every item regardless of invoice id or customer...???

+---------------------+--------------+---------------------------------------------------------------------------------------------------------------------------------+
| order_date          | name         | info                                                                                                                            |
+---------------------+--------------+---------------------------------------------------------------------------------------------------------------------------------+
| 2014-01-23 20:39:20 | Joe Customer | Boxes for boxing
Shoes for shining
2" Hermosa Plank for bobblin
Boxes for boxing
bobbles for bobblin
Lot 297 Woodale Carmel Oak |
+---------------------+--------------+---------------------------------------------------------------------------------------------------------------------------------+

My goal is to receive this same list but show all customers along with THEIR items. What am I doing wrong?

Here are the schemas, for those that need them.

Customers

+---------------+------------+------+-----+---------+----------------+
| Field         | Type       | Null | Key | Default | Extra          |
+---------------+------------+------+-----+---------+----------------+
| id            | int(11)    | NO   | PRI | NULL    | auto_increment |
| name          | text       | NO   |     | NULL    |                |
| ship_address  | text       | NO   |     | NULL    |                |
| ship_address2 | text       | NO   |     | NULL    |                |
| ship_city     | text       | NO   |     | NULL    |                |
| ship_state    | text       | NO   |     | NULL    |                |
| ship_zip      | int(6)     | NO   |     | NULL    |                |
| bill_address  | text       | NO   |     | NULL    |                |
| bill_address2 | text       | NO   |     | NULL    |                |
| bill_city     | text       | NO   |     | NULL    |                |
| bill_state    | text       | NO   |     | NULL    |                |
| bill_zip      | text       | NO   |     | NULL    |                |
| phone         | bigint(20) | NO   |     | NULL    |                |
| email         | text       | NO   |     | NULL    |                |
+---------------+------------+------+-----+---------+----------------+

Invoices

+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| id          | int(11)  | NO   | PRI | NULL    | auto_increment |
| customer    | int(11)  | NO   |     | NULL    |                |
| order_date  | datetime | NO   |     | NULL    |                |
| status      | text     | NO   |     | NULL    |                |
| freightcost | double   | NO   |     | NULL    |                |
+-------------+----------+------+-----+---------+----------------+

Invoice_items

+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| order     | int(11) | NO   |     | NULL    |                |
| qty       | int(11) | NO   |     | NULL    |                |
| itemname  | text    | NO   |     | NULL    |                |
| itemdesc  | text    | NO   |     | NULL    |                |
| itemprice | double  | NO   |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+
Was it helpful?

Solution

try the below query, you need to use GROUP BY if you use GROUP_CONCAT().

SELECT i.order_date,
       c.name,
       group_concat( concat(x.itemname,' ', x.itemdesc) separator "\n" ) as info
FROM invoices i 
INNER JOIN customers c ON i.customer = c.id
LEFT JOIN invoice_items x ON i.id = x.order
GROUP BY i.order_date,c.name
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top