我不确定是否有可能。 我的问题是从数据库中只获取一行。 表格如下:
CREATE TABLE IF NOT EXISTS `t_translate_content_pages` (
`translate_content_page_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`content_page_id` int(10) unsigned NOT NULL,
`language_code` varchar(3) NOT NULL,
`content_page_title` varchar(255) NOT NULL,
`content_page_text` text NOT NULL,
PRIMARY KEY (`translate_content_page_id`),
KEY `content_page_id` (`content_page_id`),
KEY `language_id` (`language_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `t_translate_content_pages`
(`translate_content_page_id`, `content_page_id`, `language_code`, `content_page_title`, `content_page_text`) VALUES
(3, 1, 'en', 'About', 'some text'),
(5, 1, 'ie', 'about', 'text');
我只需要一行。如果在数据库中记录了language_code
='ru'结果中有该记录,如果没有记录language_code
='en'。在Sql查询的WHERE子句中设置此子句会非常好。
关心所有人。
答案 0 :(得分:1)
select * from t_translate_content_pages
where language_code in ('ru', 'en')
order by case when language_code = 'ru' then 1 else 2 end
limit 1
答案 1 :(得分:0)
SELECT * from language_code
WHERE language_code = (
SELECT DISTINCT language_code from t_translate_content_pages
WHERE language_code in ('en', 'ru')
ORDER BY language_code DESC
LIMIT 1)
LIMIT 1
子查询首先获取语言代码,然后获取匹配的记录。
答案 2 :(得分:0)
要实现此目的,您需要根据语言首选项(而不是语言本身)进行排序。 CASE是一个很好的工具。
select * from t_translate_content_pages
ORDER BY CASE language_code
WHEN 'ru' THEN 2
WHEN 'en' THEN 1
ELSE 0
END
DESC
LIMIT 1
请注意,我故意不将查询限制为这些语言,原因有两个:
答案 3 :(得分:0)
在查询中使用LIMIT参数。
答案 4 :(得分:0)
我发现我找到了更好的解决方案。这是dscribet: Best way to test if a row exists in a MySQL table
SQL查询看起来像这个
SELECT *
FROM `t_translate_content_pages`
WHERE content_page_id = 1 AND language_code = IF(EXISTS(
SELECT `translate_content_page_id`
FROM `t_translate_content_pages`
WHERE language_code = 'ru' AND `content_page_id` = `t_translate_content_pages`.`content_page_id`
), 'ru', 'en')
在这种情况下,我不使用LIMIT或ORDER子句。