0

我有两个 MySQL 表。这是第一个 [产品] (PRIMARY = id):

[id] | title | description

这是第二个 [sizes] (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 .")";

但是这个查询复制了尺寸表中每种尺寸的产品。我想要:

从 products 表中返回在 sizes 表中至少有一个可用尺寸的记录,不重复

而且当然

希望变量中的这些尺寸显示给客户


例如:

产品:

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
4

1 回答 1

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
"

一点解释。当你连接两个表时,你从 table 中获取所有行,sizes所以id = 1 加入了四个记录,id = 2 加入了两个记录。因此,您必须将这些数字汇总到一条记录中。idproducts

于 2013-07-31T14:35:02.720 回答