Mysql SQL查询,用于在内部联接到右表后从左表中选择不同的行
我有两个MySQL表。这是第一个[产品](主=id): 这是第二个[尺寸](主要=id和尺寸):Mysql SQL查询,用于在内部联接到右表后从左表中选择不同的行,mysql,sql,select,database-design,inner-join,Mysql,Sql,Select,Database Design,Inner Join,我有两个MySQL表。这是第一个[产品](主=id): 这是第二个[尺寸](主要=id和尺寸): size只能具有[1,2,3,4,5,6]中的值 我有一个PHP数组,它有大小值。我将其重塑为逗号分隔的值字符串,如下所示: $size_list = implode(",", $sizes); $query = "SELECT t1.id,t1.title,t1.description,t2.size FROM products t1 INNER JOIN sizes t2 ON t1.id=t
size
只能具有[1,2,3,4,5,6]
中的值
我有一个PHP数组,它有大小值。我将其重塑为逗号分隔的值字符串,如下所示:
$size_list = implode(",", $sizes);
$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 .")";
对于不熟悉PHP的用户,上面的代码将生成如下字符串:“1,4,5”,然后像这样查询数据库:
$size_list = implode(",", $sizes);
$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 .")";
但此查询会复制sizes表中每个尺寸的产品。
我想:
从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
给定$size\u list=“1,2”
,我想要的输出是:
1 | product1 | description1 | 1,2,4,5
2 | product2 | description2 | 1,5
您的查询应该如下所示:
$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
"
一点解释。当您连接两个表时,您将从表
中获得所有id
的所有size
行,因此id=1与四条记录连接,id=2与两条记录连接。因此,您必须将这些数字聚合到一个记录中。您的查询应该如下所示:
$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
"
一点解释。当您连接两个表时,您将从表中获得所有id
的所有size
行,因此id=1与四条记录连接,id=2与两条记录连接。因此,您必须将这些数字聚合到一个记录中。OMG,我想我没有提到的这个查询有问题。我认为没有列出产品的所有尺寸。它只处理$size\u列表中的大小
。我错了吗Roman?等一下,我必须检查您是否尝试从查询中删除where size IN(“.$size\u list”)
?如果我这样做,它将列出所有产品!需要通过$size\u list
限制我们想要的记录,但我需要每个产品的所有可用大小。因此,如果您给出大小=(1,2),您希望获取存在大小为1或2的记录,但您希望获取此记录的所有大小?天哪,我想这个查询有问题,我没有提到。我认为没有列出产品的所有尺寸。它只处理$size\u列表中的大小
。我错了吗Roman?等一下,我必须检查您是否尝试从查询中删除where size IN(“.$size\u list”)
?如果我这样做,它将列出所有产品!需要通过$size\u list
限制我们想要的记录,但我需要每个产品的所有可用大小。因此,如果您给出大小=(1,2),您想获取存在大小为1或2的记录,但您想获取此记录的所有大小?