2

我正在显示一个页面,列出不同城市的事件:

洛杉矶
肥皂节 2 月 13 日
曲奇大赛 5 月 8 日

纽约
星际迷航大会 5 月 5 日

迈阿密
泳装大赛

事件只能链接到单个城市(region_id 在事件表上)或标记为“所有城市”(“show_in_all_cities”标记)。在没有多对多连接表(即 event_city)的情况下,有没有办法让标有“show_in_all_cities”的事件出现在每个城市下方?

我当前的查询如下(不考虑“所有城市”标志):

SELECT
  event.*,
  region.name
FROM event
  INNER JOIN region
    ON region.region_id = event.region_id
WHERE event.`date` >= CURDATE()
ORDER BY region.sort_order, event.date ASC

然后我使用 PHP 循环输出并显示城市标题。

4

2 回答 2

0

将标志添加到 order by 子句:

SELECT event.*, region.name
FROM event       
INNER JOIN region 
ON region.region_id = event.region_id 
WHERE event.`date` >= CURDATE()         
ORDER BY event.show_in_all_cities, region.sort_order, event.date ASC

(假设所有城市事件的标志设置为更高的值,否则:

ORDER BY event.show_in_all_cities DESC, region.sort_order, event.date ASC

)

于 2013-01-28T08:03:17.540 回答
0

只需将or (event.SHOW_IN_ALL_CITIES=1 )(例如,如果它是 0/1 int 标志)添加到您的 JOIN 条件。在这种情况下,对于带有此标志的每个事件,所有区域都将添加到输出集中。

SELECT
  event.*,
  region.name
FROM event
  INNER JOIN region
    ON (region.region_id = event.region_id) or (event.SHOW_IN_ALL_CITIES=1 )
WHERE event.`date` >= CURDATE()
ORDER BY region.sort_order, event.date ASC
于 2013-01-28T08:43:36.377 回答