MySQL只接收一条记录

MySQL只接收一条记录,mysql,Mysql,我不确定这是否可能。 我的问题是只从数据库中获取一行。 下表说明: 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,

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

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');
我只需要一排。如果数据库中的记录带有
语言代码
='ru',则结果中有该记录,如果没有使用
语言代码
='en'获取记录。在Sql查询的WHERE子句中设置此子句将非常好

向大家问好

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
子查询首先获取语言代码,然后获取与之匹配的记录


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

要获取此信息,需要根据语言首选项(而不是语言本身)进行排序。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
请注意,我有意不将查询限制在这些语言上,原因有二:

  • 我相信你知道怎么做
  • 这是值得考虑的,以便返回一些语言

  • 要实现这一点,您需要根据语言首选项(而不是语言本身)进行排序。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
    
    请注意,我有意不将查询限制在这些语言上,原因有二:

  • 我相信你知道怎么做
  • 这是值得考虑的,以便返回一些语言

  • 在查询中使用LIMIT参数。

    在查询中使用LIMIT参数。

    我认为我找到了更好的解决方案。这里是DScritet:

    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')
    

    在这种情况下,我不使用限制或顺序子句。

    我认为我找到了更好的解决方案。这里是DScritet:

    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')
    

    在本例中,我不使用限制或顺序子句。

    仅在一个案例中,您可以使用IF:
    orderbyif(language\u code='ru',1,2)
    仅在一个案例中,您可以使用IF:
    orderbyif(language\u code='ru',1,2)