Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL组合查询_Php_Mysql_Sql - Fatal编程技术网

Php SQL组合查询

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

我有两个查询完全按照我的要求执行,但是,我想尝试将它们结合起来

问题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.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