Here's the basic layout:
Table1:
id 10, blah
id 11, test
Table2:
id 1, 10, some info
id 2, 10, more info
id 3, 11, more info
What query using sql would allow me to display the results like so, when using php and mysql_fetch_object:
10, blah, more info, some info
11, test, more info
Right now, I have:
select * from table1
join (table2, table3)
on (table2.id = table1.id and table3.id = table1.id)
The problem with this is that I get multiple result rows for the same id because of the multiple values in tables 2 and 3.
EDIT: I got it to work!
select table1.id, group_concat(table2.data), table3.data
from table1
join (table2, table3)
on (table2.id = table1.id and table3.id = table1.id)
group by table1.id
MySQL's got the group_concat function for this, though it is internally limited to a default of 1024 characters, so you can't make arbitrarily large strings with it:
SELECT table1.id, CONCAT(table1.data, GROUP_CONCAT(table2.data))
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_ID
GROUP BY table1.id
If your string ends up being "large", you might be better off pulling the data in seperate queries and doing the concatenation in PHP.
If you only need a few certain columns, only select those columns (rather than SELECT *
), and use DISTINCT
. eg: SELECT DISTINCT id, col, col FROM ...
The DISTINCT
keyword will make sure only unique rows are returned. If even one value is different, however, it's not unique and another row will be returned.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.