Php SQL组合查询
我有两个查询完全按照我的要求执行,但是,我想尝试将它们结合起来 问题1:Php SQL组合查询,php,mysql,sql,Php,Mysql,Sql,我有两个查询完全按照我的要求执行,但是,我想尝试将它们结合起来 问题1: SELECT DISTINCT categories.id FROM categories INNER JOIN product_categories ON product_categories.category_id=categories.id INNER JOIN products ON product_categories.product_id=products
SELECT DISTINCT categories.id FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.is_sub_cat='1' AND
categories.is_paused!='1' AND
products.nexus='1'
问题2:
SELECT DISTINCT categories.top_cat FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.top_cat!='0' AND
categories.is_paused!='1' AND
products.nexus='1'
是否可以将这些查询合并为一个查询,还是在完成两个查询后,我应该在PHP中合并生成的数组?您可以使用
UNION
合并两个查询
SELECT DISTINCT categories.id FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.is_sub_cat='1' AND
categories.is_paused!='1' AND
products.nexus='1'
UNION
SELECT DISTINCT categories.top_cat FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
categories.top_cat!='0' AND
categories.is_paused!='1' AND
products.nexus='1'
您可以在以下情况下使用case
SELECT case when (categories.is_sub_cat='1' AND categories.is_paused!='1' AND
products.nexus='1') then categories.id
else categories.top_cat end as id
FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
您可以将查询组合为
SELECT DISTINCT categories.id, categories.top_cat FROM categories
INNER JOIN product_categories
ON product_categories.category_id=categories.id
INNER JOIN products
ON product_categories.product_id=products.id
WHERE
( categories.is_sub_cat='1' OR categories.top_cat!='0' ) AND
categories.is_paused!='1' AND
products.nexus='1'
或者,如果列
categories.id
和categories.top\u cat
属于相同的数据类型,或者可以强制转换为相同的数据类型,则可以使用UNION ALL
。是的,UNION似乎是一个合法的选项。对于您的情况,这不重要,因为您是从同一个表中选择的,但作为补充说明,您应该知道,在使用UNION时,通常需要在表中具有相同数量的列(如果它们不同)。您可以使用WHERE
子句中的条件执行此操作:
SELECT DISTINCT c.id
FROM categories c INNER JOIN
product_categories pc
ON pc.category_id = c.id INNER JOIN
products p
ON pc.product_id = p.id
WHERE p.nexus = 1 AND
c.is_paused <> 1 AND
(c.is_sub_cat = 1 OR
c.top_cat <> 0
);
选择不同的c.id
从c类内部连接
产品类别pc
在pc.category_id=c.id内部连接上
产品p
在pc上,产品id=p.id
其中p.nexus=1和
c、 是1和1吗
(c.is_sub_cat=1或
c、 第0类
);
注:
- 表别名使查询更易于编写和读取
- 假设列是数字,不要将值与字符串进行比较。尽量避免类型转换问题
按类别排序。类别?你需要添加按子句排序。在这种情况下,你必须使用subquery,然后应用ORDER BY子句@paddyhalihan