Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 Mysql查询,两个表。仅当值存在于其他表中时才选择_Php_Mysql - Fatal编程技术网

Php Mysql查询,两个表。仅当值存在于其他表中时才选择

Php Mysql查询,两个表。仅当值存在于其他表中时才选择,php,mysql,Php,Mysql,我有两张桌子,选项和产品。我想从options中选择all,但仅当options.id存在于任何products列中时。这是我的两张桌子: 选项表: id option value 1 'kategorija' 'Muški' 2 'kategorija' 'Ženski' 3 'kategorija' 'Dječji' 4 'brand' 'Casio' 5 'bran

我有两张桌子,选项和产品。我想从options中选择all,但仅当options.id存在于任何products列中时。这是我的两张桌子:

选项表:

id        option         value

1       'kategorija'    'Muški'
2       'kategorija'    'Ženski'
3       'kategorija'    'Dječji'
4       'brand'         'Casio'
5       'brand'         'Lorus'
6       'brand'         'Seiko'
7       'brand'         'Citizen'
8       'mehanizam'     'Quartz'
9       'mehanizam'     'Automatik'
10      'mehanizam'     'Eco-Drive'
11      'brojcanik'     'Analogni'
12      'brojcanik'     'Digitalni'
13      'grupa'         'Satovi'
14      'grupa'         'Naocale'
和第二个表产品:

 id     grupa   brand    mehanizam  brojcanik   kategorija  

10380   '13'     '4'        '8'        '11'         '2'
10560   '13'     '4'        '9'        '12'         '1'
11100   '13'     '6'        '8'        '11'         '2'
12380   '14'     '7'        '8'        '11'         '2'
12490   '13'     '6'        '9'        '11'         '1'
15720   '14'     '6'        '9'        '12'         '1'
16550   '14'     '5'        '8'        '12'         '3'
我的查询尝试:

SELECT * FROM options WHERE EXISTS( SELECT 1 FROM products WHERE grupa="14" AND brand=options.id OR mehanizam=options.id OR brojcanik=options.id OR kategorija=options.id)
结果应该是:

Array
(
    [0] => Array
        (
            [id] => 14
            [option] => grupa
            [value] => Naocale
        )

    [1] => Array
        (
            [id] => 7
            [option] => brand
            [value] => Citizen
        )

    [2] => Array
        (
            [id] => 8
            [option] => mehanizam
            [value] => Quartz
        )

    [3] => Array
        (
            [id] => 11
            [option] => brojcanik
            [value] => Analogni
        )

    [4] => Array
        (
            [id] => 2
            [option] => kategorija
            [value] => Zenski
        )
)
对于id为12380的产品(即grupa 14),此数组仅用于一行。对于产品行中存在grupa 14的其他产品,数组应该继续。 我不知道这是否只有通过mysql查询才能实现。如果这是不可能的,我将不得不做与php的比较,这是我试图避免


谢谢你不用特别使用
14
,你只需再次加入
选项即可

WHERE EXISTS (SELECT 1 FROM products JOIN options ON id = grupa ...

您不必专门使用
14
,只需再次加入
选项即可

WHERE EXISTS (SELECT 1 FROM products JOIN options ON id = grupa ...

根据你的陈述

我想从选项中选择全部,但仅当选项中存在options.id时 “产品”列的名称

您可以在子查询中使用
UNION all
组合所有值,并将结果与表
options
联接

SELECT  DISTINCT a.*
FROM    options a
        INNER JOIN
        (
            SELECT  brand col FROM products WHERE grupa = 14
            UNION ALL
            SELECT  mehanizam col FROM products WHERE grupa = 14
            UNION ALL
            SELECT  brojcanik col FROM products WHERE grupa = 14
            UNION ALL
            SELECT  kategorija col FROM products WHERE grupa = 14
        ) b ON a.id = b.col

更好的方式

SELECT  * 
FROM    options a
WHERE   EXISTS
        ( 
            SELECT  1 
            FROM    products b
            WHERE   b.grupa = '14' AND 
                    a.ID IN (brand, mehanizam, brojcanik, kategorija)
        )

根据你的陈述

我想从选项中选择全部,但仅当选项中存在options.id时 “产品”列的名称

您可以在子查询中使用
UNION all
组合所有值,并将结果与表
options
联接

SELECT  DISTINCT a.*
FROM    options a
        INNER JOIN
        (
            SELECT  brand col FROM products WHERE grupa = 14
            UNION ALL
            SELECT  mehanizam col FROM products WHERE grupa = 14
            UNION ALL
            SELECT  brojcanik col FROM products WHERE grupa = 14
            UNION ALL
            SELECT  kategorija col FROM products WHERE grupa = 14
        ) b ON a.id = b.col

更好的方式

SELECT  * 
FROM    options a
WHERE   EXISTS
        ( 
            SELECT  1 
            FROM    products b
            WHERE   b.grupa = '14' AND 
                    a.ID IN (brand, mehanizam, brojcanik, kategorija)
        )

为什么不包括选项:
5
8
3
6
9
1
?不包括在哪里?在数组中?被删除的答案对我来说很好。不知道为什么被删除。为什么不包括选项:
5
8
3
6
9
1
?不包括在哪里?在数组中?被删除的答案对我来说很好。不知道删除的原因。抱歉,我无法对此进行有效查询。你能做一个完整的查询吗?对不起,我不能用这个做一个有效的查询。你能提出一个完整的问题吗?我不知道如何感谢你。我为这个问题挣扎了两天,效果非常好。谢谢,我很接近。我必须在两个产品专栏中使用LIKE。有什么方法可以在里面做吗?我不知道该怎么感谢你。我为这个问题挣扎了两天,效果非常好。谢谢,我很接近。我必须在两个产品专栏中使用LIKE。有没有一种方法可以从内部或任何其他方式来完成?