mysql选择。如果WHERE中的值不存在,则根据WHERE中的另一个(值)选择
我有这样的桌子 我有两个变量/值,例如mysql选择。如果WHERE中的值不存在,则根据WHERE中的另一个(值)选择,mysql,Mysql,我有这样的桌子 我有两个变量/值,例如FLASH和LCD 我想要:如果name列中不存在FLASH,则选择。。。其中columnname='LCD'。如果存在FLASH,则不基于LCD 我写了这样的疑问 SELECT t1.name AS lev1, t1.url AS url1 FROM CategoryForTest AS t1 LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id LEFT JOIN Catego
FLASH
和LCD
我想要:如果name
列中不存在FLASH
,则选择。。。其中
columnname='LCD'
。如果存在FLASH
,则不基于LCD
我写了这样的疑问
SELECT
t1.name AS lev1, t1.url AS url1
FROM CategoryForTest AS t1
LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id
LEFT JOIN CategoryForTest AS t3 ON t3.parent = t2.category_id
LEFT JOIN CategoryForTest AS t4 ON t4.parent = t3.category_id
WHERE exists (
SELECT name
from CategoryForTest
WHERE t4.name = 'FLASH'
)
UNION ALL
SELECT
t1.name AS lev1, t1.url AS url1
FROM CategoryForTest AS t1
LEFT JOIN CategoryForTest AS t2 ON t2.parent = t1.category_id
LEFT JOIN CategoryForTest AS t3 ON t3.parent = t2.category_id
LEFT JOIN CategoryForTest AS t4 ON t4.parent = t3.category_id
WHERE not exists (
SELECT name
from CategoryForTest
WHERE t4.name = 'FLASH'
)
AND t2.name = 'LCD'
但我明白了
Array
(
[0] => Array
(
[lev1] => ELECTRONICS
[url1] => url-electronics
)
[1] => Array
(
[lev1] => TELEVISIONS
[url1] => url-televisions
)
)
希望只看到
[0]=>数组
基于此找到解决方案
如果FLASH
存在,则基于FLASH
获取数据。如果FLASH
不存在,则基于LCD
进行提取,这可能会对您有所帮助
(
SELECT
t1.name AS lev1, t1.url AS url1
FROM test AS t1
LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
LEFT JOIN test AS t4 ON t4.parent = t3.categ_id
WHERE not exists (
SELECT
t1.name AS lev1, t1.url AS url1
FROM test AS t1
LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
LEFT JOIN test AS t4 ON t4.parent = t3.categ_id
WHERE exists (
SELECT name
from test
WHERE t4.name = 'FLASH'
)
)
AND t2.name = 'LCD'
GROUP BY t1.categ_id
)
UNION ALL
(
SELECT
t1.name AS lev1, t1.url AS url1
FROM test AS t1
LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
LEFT JOIN test AS t4 ON t4.parent = t3.categ_id
WHERE exists (
SELECT name
from test
WHERE t4.name = 'FLASH'
)
)
fidle is如何使用两个单独的查询,首先用于获取名称为FLASH的查询,然后如果未找到任何结果,则选择名称为LCD的查询。两个单独的查询将使用额外的资源?不确定它对性能的影响有多大(比较两个或一个查询)。我可能还需要一个查询来从另一个表获取产品。因此,只有当我将
FLASH
更改为FLASH1
时,才会出现3个查询。我使用LCD
@user2118559获得一个长列表,您想忽略1?我试图更改为FLASH1
(mysql中不存在的值,用于执行基于LCD
的查询)并查看多个LCD
,但只需要查看一个(与mysql中一样,只有一个LCD
)@user2118559表中是否有任何唯一字段可用于group by()?因此,请在group by中使用category_id。
(
SELECT
t1.name AS lev1, t1.url AS url1
FROM test AS t1
LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
LEFT JOIN test AS t4 ON t4.parent = t3.categ_id
WHERE not exists (
SELECT
t1.name AS lev1, t1.url AS url1
FROM test AS t1
LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
LEFT JOIN test AS t4 ON t4.parent = t3.categ_id
WHERE exists (
SELECT name
from test
WHERE t4.name = 'FLASH'
)
)
AND t2.name = 'LCD'
GROUP BY t1.categ_id
)
UNION ALL
(
SELECT
t1.name AS lev1, t1.url AS url1
FROM test AS t1
LEFT JOIN test AS t2 ON t2.parent = t1.categ_id
LEFT JOIN test AS t3 ON t3.parent = t2.categ_id
LEFT JOIN test AS t4 ON t4.parent = t3.categ_id
WHERE exists (
SELECT name
from test
WHERE t4.name = 'FLASH'
)
)