简体   繁体   中英

Mysql concat column on table while joining from another to php

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM