现在,在执行查询时显示自定义mySQL列

时间:2015-04-17 09:32:34

标签: php mysql

我有两张桌子。

== Table structure for table all_tasks

|------
|Column|Type|Null|Default
|------
|id|int(11)|No|
|name|text|No|


|1|Task 1
|2|Task2
|3|Task 3
|4|Task 4
|5|Task 5
== Table structure for table task_list

|id|int(11)|No|
|task_list|varchar(50)|No|
== Dumping data for table task_list

|1|1,2,3

第一个表(all_taska)包含我的应用程序的所有任务,第二个表从第一个表中获取任务列表。

第二个表得到了列task_list,它是数组格式(1,2,3,4,5)

我想创建<select> <option>元素,其中所有任务都来自第一个表,其中选择的标签是insde&#34; task_list&#34;第二个表中的数组。问题是查询结果无法返回costom列(&#34;在查询中选择&#34;)。

有人知道问题出在哪里吗?

SELECT a.id, a.name, IF(a.id IN b.task_list, 'no selected', 'selected') as Selected
FROM all_tasks as a LEFT JOIN task_list as b ON a.id IN (b.task_list)

2 个答案:

答案 0 :(得分:1)

您无法使用IN运算符来检查varchar中的条件。如果要实现多对多关系,可以使用以下方案:

create table task_list (list_id int not null, task_id int not null)

使用此方案,您的查询可以通过以下方式实现:

select t.list_id, t.id, t.name, 
       if (tl.list_id is not null, 'selected', 'no selected') as Selected  
from task_list tl right 
     join 
         (select distinct  list_id, id, name from all_tasks join task_list) as t 
     on t.list_id = tl.list_id and t.id = tl.task_id;

答案 1 :(得分:0)

您永远不应该将数据存储为以逗号分隔的字符串,您应该考虑规范化。但是在这种情况下,您可以使用

select 
t1.id , 
t1.name, 
case 
  when t2.id is not null then 'selected' else 'no selected' 
end as `selected` 
from all_tasks t1 
left join task_list t2 on find_in_set(t1.id,t2.task_list) > 0 ;