Mysql查询的情况

Mysql查询的情况,mysql,Mysql,我有一张桌子,里面有各种语言 桌子 蓝菜|蓝菜|兰菜|兰菜|兰菜|兰菜|兰菜|兰朗 ---------------—————————————————————— 1 | nl | 8 | 1 4 | fr | 8 | 0 我需要检查$\u会话['lang']中的语言是否在表中可用,否则它必须使用主语言 不幸的是,当运行下面的查询时,他返回带有FR和NL als lan\u dish\u lan的行。。。在这种情况下,它只需返回带有FR的行 SELECT * FROM `language_dish`

我有一张桌子,里面有各种语言

桌子

蓝菜|蓝菜|兰菜|兰菜|兰菜|兰菜|兰菜|兰朗
---------------——————————————————————
1 | nl | 8 | 1
4 | fr | 8 | 0

我需要检查
$\u会话['lang']
中的语言是否在表中可用,否则它必须使用主语言

不幸的是,当运行下面的查询时,他返回带有FR和NL als lan\u dish\u lan的行。。。在这种情况下,它只需返回带有FR的行

SELECT * FROM `language_dish` WHERE 
(CASE
 WHEN lan_dish_lang = "fr"
 THEN lan_dish_lang = "fr"
 ELSE lan_dish_mainlang = 1
 END) AND lan_dish_dishid = 8

这里有两种可能适合你的方法

/*
DROP TABLE IF EXISTS T;

CREATE TABLE T (lan_dish_id INT, lan_dish_lang VARCHAR(2), lan_dish_dishid INT, lan_dish_mainlang INT);
*/
truncate table t;
INSERT INTO T VALUES
(1                 , 'nl' , 8,                         1) ,
(4                 , 'fr' , 8,                         0) ,
(5                 , 'nl' , 9,                         1) ,
(6                 , 'de' , 7,                         0) 

;

select s.lan_dish_dishid, left(gc,instr(concat(gc,','),',') -1) lang
from
(
select lan_dish_dishid, group_concat(lan_dish_lang order by lan_dish_mainlang) gc
from t
#where lan_dish_dishid = 8
group by lan_dish_dishid
order by lan_dish_dishid
) s
;
select s.lan_dish_id, s.lan_dish_lang
from
(
select t.*,
         if(t.lan_dish_dishid <> @p , @rn:=1,@rn:=@rn+1) rn,
         @p:= t.lan_dish_dishid p
from t , (select @rn:=0,@p:=0) r
order by t.lan_dish_dishid, t.lan_dish_Mainlang
) s where s.rn = 1

您问过,3小时后,当where子句中的case语句得到满足时,SQL不会停止读取行,并且由于where子句对这两行的计算结果都为true,因此这两行都会返回。我知道了,但这不是必需的结果。如果栏lan_dish_lang中有FR的行存在,则需要显示该行。否则,如果它不存在,它需要为特定的lan\u dish\u dishid显示lan\u dish\u mainlang=1的行。我希望你能理解…我很激动-我发布的样本数据的预期结果是什么?我得到的是带有FR的行。好的,但如果带有FR的行不存在,它需要显示我的样本数据lan_dish_ID5中列lan_dish_mainlang=1找不到FR并返回nl的行,这不正确吗?我明白了,但6的原因是什么?这不是FR,也不是主语
+-------------+---------------+
| lan_dish_id | lan_dish_lang |
+-------------+---------------+
|           6 | de            |
|           4 | fr            |
|           5 | nl            |
+-------------+---------------+
3 rows in set (0.01 sec)