2

我不确定这是否可以单独使用 SQL 查询,但我基本上想创建一个像这样的表,但在课程类型字段上有一个条件,根据什么存储“进一步”或“更高”作为数字“课程类型”是:

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"or "Further"

我想能够说如果这个course_type字段是LIKE %higher%那么行的值是1。同样,如果值为course_typeisLIKE %higher%further那么两个字段都存储为 a1等。

这是否可以通过创建临时表或巧妙的 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 回答