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'

作为更新问题的后续内容进行编辑

我明白:

  • 您希望找到所有旅行的所有预订的作者,其中
    字段id\u 34
    以“adas”开头
  • 预订作者保存在表
    exp\u channel\u titles
  • 预订和旅游在表
    exp\u channel\u data
    中维护,列
    channel\u id
    用于区分预订(17)和旅游(5)
  • 预订和旅游通过旅游的
    输入\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%'