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

JOIN条件に追加するだけor (event.SHOW_IN_ALL_CITIES=1 )です(たとえば、0/1 intフラグの場合)。この場合、このフラグが設定されたイベントごとに、すべての領域が出力セットに追加されます。

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 に答える
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 に答える