Mysql 多个查询,还是嵌套查询?
我有两个频道 第一个频道是“预订”。这将保存Mysql 多个查询,还是嵌套查询?,mysql,Mysql,我有两个频道 第一个频道是“预订”。这将保存成员id和巡演id 第二个频道是“旅游”。它保存由上述巡更id引用的巡更详细信息 我需要查询“tours”频道中的字段,获取满足查询的那些字段的Touru\u id。然后,我需要找到所有与tour\u id匹配的“预订”条目,其中一个是查询为真的条目 完成两个SQL查询还是一个嵌套查询更好?如果嵌套,如何进行 exp\u channel\u数据 |通道id |入口id |字段id | 1 || exp\u频道标题 |频道id |入口id |作者id
成员id
和巡演id
第二个频道是“旅游”。它保存由上述巡更id
引用的巡更详细信息
我需要查询“tours”频道中的字段,获取满足查询的那些字段的Touru\u id
。然后,我需要找到所有与tour\u id
匹配的“预订”条目,其中一个是查询为真的条目
完成两个SQL查询还是一个嵌套查询更好?如果嵌套,如何进行
exp\u channel\u数据 |通道id |入口id |字段id | 1 || exp\u频道标题 |频道id |入口id |作者id ||
SELECT titles.author_id
FROM exp_channel_data AS tours
LEFT JOIN exp_channel_titles AS titles ON bookings.entry_id = titles.entry_id
LEFT JOIN exp_channel_data AS bookings
ON tours.entry_id = bookings.entry_id
AND bookings.channel_id = '17'
WHERE tours.channel_id = '5'
AND tours.field_id_34 = 'DSV04'
假设表结构如下所示:
|channel_id|tour_id|member_id|field1|...|
-----------------------------------------
|tours |1 |NULL |abc | |
|tours |2 |NULL |def | |
|booking |1 |1 | | |
|booking |1 |2 | | |
|booking |2 |3 | | |
你可以自己加入表格,得到你想要的结果
SELECT
booking.tour_id
booking.member_id
FROM
my_table tours
LEFT JOIN my_table booking
ON tours.tour_id = booking.tour_id
AND booking.channel_id = 'booking'
WHERE
tours.channel_id = 'tours'
AND tours.field1 = 'abc'
作为更新问题的后续内容进行编辑 我明白:
- 您希望找到所有旅行的所有预订的作者,其中
以“adas”开头字段id\u 34
- 预订作者保存在表
exp\u channel\u titles
- 预订和旅游在表
中维护,列exp\u channel\u data
用于区分预订(17)和旅游(5)channel\u id
- 预订和旅游通过旅游的
和预订的输入\u id
链接字段\u id\u 227
- 预订和作者通过预订的
和entry\u id
exp\u频道标题中的
链接entry\u id
SELECT
titles.author_id
FROM
exp_channel_data tours
LEFT JOIN exp_channel_data bookings
ON bookings.channel_id = 17
AND bookings.field_id_227 = tours.entry_id
LEFT JOIN exp_channel_titles titles
ON titles.entry_id = bookings.entry_id
WHERE
tours.channel_id = 5
AND tours.field_id_34 LIKE 'adas%'
彻底理解所需的样本输入输出。通道=表格?对我来说,这听起来像是一种加入,但示例输入/输出会让事情变得清楚<代码>从tours中选择b.member\u id t LEFT加入t.tours\u id=b.tours\u id上的预订b,其中t.field1='abc'和t.field2='def'@hsan谢谢。两个通道的数据都在同一个表中,因此我认为我不能使用连接。表中有一列名为“channel_id”,我可以用它来确定每个频道的目标。@ccdavies wait,所以您在同一个表中有预订和旅游数据??这听起来真是个坏主意。你说的“频道”是什么意思?请提供示例数据以澄清。@hs回答“是”。数据都在CMS中,所以我不能选择它应该放在哪里。CMS有频道,由他们的“频道id”引用。谢谢hsan。我已经对这个问题做了调整,以显示表列和我如何使用你的答案。“author\u id”位于“exp\u channel\u titles”表中,因此在确定哪些“booking”频道条目符合查询条件后,我需要通过“entry\u id”以某种方式获取此author id。我尝试添加一个额外的左连接,但这不起作用。有什么想法吗?你应该把接头换一下。在join with titles中,您在查询中还不知道bookings表之前就引用了它。我无法用您的示例解决这个问题。请参阅“编辑我的问题”部分,其中包含一个带有两个查询的工作示例。也许这有助于解释我想做什么?
SELECT
titles.author_id
FROM
exp_channel_data tours
LEFT JOIN exp_channel_data bookings
ON bookings.channel_id = 17
AND bookings.field_id_227 = tours.entry_id
LEFT JOIN exp_channel_titles titles
ON titles.entry_id = bookings.entry_id
WHERE
tours.channel_id = 5
AND tours.field_id_34 LIKE 'adas%'