【发布时间】:2017-01-17 20:36:43
【问题描述】:
我有这两张表——user_schedules和user_schedule_meta,如下图:
------------------------------------
| id | scheduler_id | status |
------------------------------------
1 3 pending
2 5 active
3 6 active
和
----------------------------------------------
| id | user_schedule_id | meta_key |meta_value
----------------------------------------------
1 3 course-id 135
2 3 session-id 15
3 3 schedule-id 120
我想编写一个查询,让我能够从两个表中选择,例如,满足以下 5 个条件中的每一个:
- user_schedule_id = 3
- scheduler_id = 6
- session_id = 15
- 课程 ID = 135
- 计划 ID = 120
这是我目前所拥有的,但它不起作用:
SELECT user_schedule_meta.`id` FROM user_schedule_meta, user_schedules
WHERE user_schedules.`scheduler_id` = 6
AND user_schedules.id = user_schedule_meta.`user_schedule_id`
AND (
(user_schedule_meta.`meta_key` = 'course-id' AND user_schedule_meta.`meta_value` = 135)
OR (user_schedule_meta.`meta_key` = 'session-id' AND user_schedule_meta.`meta_value` = 15)
OR (user_schedule_meta.`meta_key` = 'daily-schedule-id' AND user_schedule_meta.`meta_value` = 120)
)
GROUP BY user_schedule_meta.`id`
有什么建议我做的不对吗?
【问题讨论】:
-
这两张表之间有没有关系。
-
@Suchit,
user_schedule_meta表包含有关user_schedules table中每个条目的附加信息 -
如果您加入
user_schedules.id = user_schedule_meta.user_schedule_id并且您的条件是user_schedule_id = 3 and scheduler_id = 6。你不会得到任何记录,因为它们是不同表中的同一列,你需要在这里使用or。 -
请勿使用
user_schedule_meta, user_schedules,这是一种旧式写作。使用 join 代替。