我有两个MySQL表。这是第一个[产品](PRIMARY = id):
[id] | title | description
这是第二个[尺寸](PRIMARY = id& size):
[id] | [size]
size
只能包含[1,2,3,4,5,6]
的值。
我有一个具有大小值的PHP数组。我将它重塑为逗号分隔的值字符串,如下所示:
$size_list = implode(",", $sizes);
对于那些不熟悉PHP的人,上面的代码会生成一个这样的字符串:“1,4,5”,然后像这样查询数据库:
$query = "SELECT t1.id,t1.title,t1.description,t2.size FROM products t1 INNER JOIN sizes t2 ON t1.id=t2.id WHERE size IN(".$size_list .")";
但是此查询会复制尺寸表中每种尺寸的产品。 我想:
从产品表中返回记录,这些记录在尺寸表中至少有一个可用尺寸,没有重复
当然
希望变量中的这些尺寸显示给客户
例如:
产品:
1 | product1 | description1
2 | product2 | description2
3 | product3 | description3
4 | product4 | description4
尺寸:
1 | 1
1 | 2
1 | 4
1 | 5
2 | 1
2 | 5
鉴于$sizes_list="1,2"
,我想要的输出是:
1 | product1 | description1 | 1,2,4,5
2 | product2 | description2 | 1,5
答案 0 :(得分:3)
您的查询应该是:
$query = "
select t1.id, t1.title, t1.description, group_concat(t2.size SEPARATOR ",") as sizes
from products as t1
inner join sizes as t2 on t1.id=t2.id
where t1.id in (select t3.id from sizes as t3 where t3.size in (".$size_list .")
group by t1.id, t1.title, t1.description
"
一点解释。当您连接两个表时,您从表sizes
获取表id
中所有products
的所有行,因此id = 1连接四个记录,id = 2连接两个记录。所以你必须将这些数字汇总成一条记录。