1

それが可能かどうかはわかりません。私の問題は、データベースから 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');

1行だけ取得する必要があります。データベースに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

これを取得するには、(言語自体ではなく)言語設定に基づいて並べ替える必要があります。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

次の2つの理由から、意図的にクエリをこれらの言語に限定しなかったことに注意してください。

  1. あなたはそれを行う方法を知っていると確信しています
  2. 一部の言語が返されるように、これを検討する価値があります。
于 2012-11-12T18:02:03.243 に答える
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

より良い解決策を見つけたことに感謝します。ここにdscribetがあります: 行がMySQLテーブルに存在するかどうかをテストする最良の方法

そして、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 に答える
0

クエリで LIMIT 引数を使用します。

于 2012-11-12T18:12:09.537 に答える