1

我不确定这是否可能。我的问题是从数据库中只获取一行。下表描述:

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子句中设置这个子句会很好。

向所有人致敬。

4

5 回答 5

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
于 2012-11-12T17:57:57.897 回答
0

在查询中使用 LIMIT 参数。

于 2012-11-12T18:12:09.537 回答
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

子查询首先获取语言代码,然后获取它的匹配记录。

于 2012-11-12T17:59:07.740 回答
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

请注意,我故意不将查询限制为这些语言,原因有两个:

  1. 我相信你知道怎么做
  2. 值得考虑这一点,以便返回一些语言。
于 2012-11-12T18:02:03.243 回答
0

我认为我找到了更好的解决方案。它在这里描述: 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 子句。

于 2012-11-12T23:22:32.037 回答