2

これがSQLクエリだけで可能かどうかはわかりませんが、基本的にはこのようなテーブルを作成したいのですが、コースタイプフィールドに条件を付けて、「futher」または「higher」を数値に基づいて格納します。 'course_type'は次のとおりです。

CREATE TABLE IF NOT EXISTS `courses_index` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` text COLLATE utf8_unicode_ci NOT NULL,
      `url` text COLLATE utf8_unicode_ci NOT NULL,
      `further` int(1) NOT NULL,
      `higher` int(1) NOT NULL,
      PRIMARY KEY (`id`),
      FULLTEXT `index` (title, url, course_type)
) AS SELECT title, url, course_type FROM `courses`

コーステーブルの私のフィールドは、またはcourse_typeなどの文字列を含む標準のテキストフィールドです。"Higher, Further""Further"

course_typeこのフィールドがであるかどうかを言いたいLIKE %higher%のですが、行の値はです1。同様に、の値がの場合、course_type両方LIKE %higher%furtherのフィールドが1などとして格納されます。

これは、一時テーブルまたは巧妙なMySQLクエリを作成することで可能ですか?

よろしくお願いします

ティム

4

2 に答える 2

1

以下が機能するはずです。

CREATE TABLE ...
AS 
SELECT title, 
       url, 
       CASE
         WHEN course_type LIKE '%Further%' THEN 1
         ELSE 0
       END as further,
       CASE
         WHEN course_type LIKE '%Higher%' THEN 1
         ELSE 0
       END as higher
  FROM `courses`

壊れた構文を修正しました

このsqlfiddleも参照してください

于 2012-11-23T13:02:55.677 に答える
0

@ beny23の回答に基づいて、私は次のように機能することになりました。

CREATE TABLE IF NOT EXISTS `courses_index` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` text COLLATE utf8_unicode_ci NOT NULL,
      `url` text COLLATE utf8_unicode_ci NOT NULL,
      `course_type` int(2),
      PRIMARY KEY (`id`),
      FULLTEXT `index` (title, url, course_type)) 
AS
SELECT title, 
       url, 
       course_type,
       CASE
         WHEN course_type LIKE '%higher%further%' THEN 3
         WHEN course_type LIKE '%higher%' THEN 2
         WHEN course_type LIKE '%further%' THEN 1
         ELSE 0
       END
  FROM `courses`
于 2012-11-23T13:24:10.033 に答える