基于来自另一个字段的LIKE构建MySQL表

时间:2012-11-23 12:52:01

标签: mysql sql sql-like

我不确定单独使用SQL查询是否可行,但我基本上想要创建一个这样的表但是在课程类型字段上有一个条件,它存储'moreher'或'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查询来实现吗?

非常感谢提前

2 个答案:

答案 0 :(得分: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`

EDIT修复了破解的语法

另见this sqlfiddle

答案 1 :(得分: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`