【问题标题】:select multiple rows with condition for one row mysql为一行mysql选择多行条件
【发布时间】:2013-08-21 10:16:11
【问题描述】:

我正在尝试加入 2 个表、事件和 event_dates,每个事件都有很多日期

事件表包含IDname; event_dates - ID, event_id, date, place_id 每天是event_dates 表中的一行。不同的日子place_id可以不同。

我想显示本月的事件列表 - 但只有那些今天的 place_id = 1。

我应该为此编写什么 sql 查询? 谢谢

编辑

我很抱歉,我错过了,结果和事件我必须为每个事件显示 event_dates 表。

所以结果会像

1) event id and name with its dates for this month (and for today place_id = 1)
2) other event id and name  with its dates for this month (and for today place_id = 1)
etc

SELECT e.*, d.date
FROM events e
JOIN event_dates d
ON e.id = d.event_id
WHERE d.date BETWEEN {d '2013-08-01'} and {d '2013-08-31'}
AND d.place_id = 1

这个查询不起作用,因为,如果所有月份的 place_id 都是 2、3 或其他 smth,并且只有今天 1,在这种情况下,我将只有 event_dates 表中只有今天行的事件

RESULT 应如下所示

                Aug1        Aug2        Aug3 ....   Aug21(today)    . . .Aug30
eventName1      placeId     placeId     placeId      placeId            placeId
eventName2      placeId     placeId     placeId     placeId             placeId
eventName3      placeId     placeId     placeId     placeId             placeId

因此,我将显示本月的事件列表及其信息,但列出的所有这些事件今天的 placeId = 1。

【问题讨论】:

  • 到目前为止你尝试过什么?虽然我可以写出一个可以为你解决这个问题的查询,但你真的觉得你什么都没试过,因为我写的查询是更基本的 INNER JOIN 查询之一。
  • @Simonatmso.net,对不起,我错过了最重要的条件,没有它只是简单的加入,你是对的
  • @John:我不明白。你写过:我想显示这个月的事件列表 - 但只有那些,今天有 place_id = 1。如果我你的月份你所有的地方都相差 1,对我来说,你没有行.请根据需要添加一些样本。
  • @JoeTaras,我更新了问题

标签: mysql sql join pivot-table crosstab


【解决方案1】:

试试这个:

SELECT e.*, d.date
FROM events e
JOIN event_dates d
ON e.id = d.event_id
WHERE d.date BETWEEN {d '2013-08-01'} and {d '2013-08-31'}
AND d.place_id = 1

但我有一个疑问。如果您的 place_id = 1 有更多天数,您想更多次展示您的活动吗?

【讨论】:

    【解决方案2】:

    试试这样的:

    SELECT *.events from events 
    left join event_date 
    on id.events = event_dates.event_id 
    where event_dates.dates between '01/08/2013' AND '31/08/2013' 
    AND event_dates.place_id = 1;
    

    【讨论】:

    • LEFT JOIN 比 INNER JOIN 更昂贵(您已经模拟了一个 INNER,因为在 WHERE 子句中您设置了从表 event_dates 的条件)
    【解决方案3】:

    查询:

    SELECT events.id, events.name,event_dates.date,event_dates.place_id
    FROM events
    INNER JOIN event_dates
    ON events.id=event_dates.event_id
    WHERE event_dates.date = sysdate and event_dates.place_id=1;
    

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多