7つのテーブルから組み合わせたselectステートメントがあります
SELECT * (//instead of * i put in my code the proper columns i need from the selected tabls)
FROM
ev_events_eve
LEFT JOIN ev_events_multilang_evmulti ON ev_events_multilang_evmulti.event_evmulti = ev_events_eve.id_eve
LEFT JOIN ev_schedule_sch ON ev_schedule_sch.event_id_sch = ev_events_eve.id_eve
LEFT JOIN ev_events_type_et ON ev_schedule_sch.event_type_id_sch = ev_events_type_et.id_et
LEFT JOIN ev_events_type_multilang_etmulti ON ev_events_type_multilang_etmulti.idevent_type_etmulti = ev_events_type_et.id_et
LEFT JOIN ev_schedule_multilang_schmulti ON ev_schedule_multilang_schmulti.id_schedule_schmulti = ev_schedule_sch.id_sch
LEFT JOIN ev_timetable_tt ON ev_timetable_tt.schedule_id_tt = ev_schedule_sch.id_sch AND ev_timetable_tt.event_id_tt = ev_events_eve.id_eve
WHERE (ev_events_eve.active_eve = 1 AND ev_schedule_multilang_schmulti.iso_code_lang_schmulti = '{$current_language}' AND ev_schedule_sch.active_sch = 1) AND
ev_timetable_tt.end_date_tt > CURDATE() OR (ev_timetable_tt.weekday_tt = DAYNAME(CURDATE()) AND ev_timetable_tt.end_date_tt > CURDATE()) OR ev_timetable_tt.specific_date_tt > CURDATE()
ORDER BY ev_timetable_tt.start_date_tt ASC LIMIT 3
このステートメントがwhere句を無視しているという問題、サンプルsqlステートメントを作成するために使用するmysqlを使用するたびに、通常の左結合または内部結合を持つ2つまたは3つのテーブルで構成されているため、この問題について話し合う必要があります。私のコードで言及されていないことをさらに調べてください、しかし私は上記のコードが私と一緒にこの問題を処理するのに十分ではないことを知っています、しかし私はそれを私と話し合うことができる誰かが必要です
次の情報で質問を更新しました
主なビジネスルール:
- プロジェクトは多言語のウェブサイトのためのものです
- テーブルは次のとおりです。
ev_events_eve
(ID、ロゴ、スローガン、イベント全体の開始日と終了日などのイベントエンティティ)ev_events_multilang_evmulti
(名前(en、fr、grなど)、説明などのメインイベントテーブルの多言語テーブル…など)ev_schedule_sch
(ID、イベントテーブルへの外部キーなどのスケジュールエンティティ)ev_schedule_multilang_schmulti
(メインスケジュールテーブルの多言語テーブル)ev_timetable_tt
(ev_schedule_schテーブルに関連する開始日時と終了日時を保存します)
- すべてのテーブルは2つのテーブルに複製され、1つはエンティティを格納し、もう1つは多言語データを格納します。
- テーブル間の関係
- メインテーブルはev_events_eveです
ev_events_multilang_evmulti
外部キーを介してメインテーブルに関連付けられていますev_schedule_sch related
外部キーを介してメインテーブルにev_schedule_multilang_schmulti
ev_schedule_sch
外部キーを介してテーブルに関連ev_timetable_tt
ev_schedule_sch
外部キーを介して関連しています
イベントテーブルから着信3行を取得するステートメントを作成する必要があります(すべてのフィールドの完全なスキーマがないため、最新の3行を取得する必要があるとしましょう。後で、WHERE句で説明します。 ))に加えて、この3行は、イベントテーブルのすべての行に関連するスケジュールテーブルから6行も取得します。したがって、推定結果は次のようになります。4つのイベントがあると仮定します。
- 1番目は呼ばれます:event#1
- このイベントには、スケジュール関連のテーブルに3つの行があります(したがって
、これらの行をすべて取得します)
- このイベントには、スケジュール関連のテーブルに3つの行があります(したがって
- 2番目は呼ばれます:event#2
- これには、スケジュール関連のテーブルに11行あります(それらから6行のみを取得します)
- これには、スケジュール関連のテーブルに11行あります(それらから6行のみを取得します)
- 3番目は呼ばれます:event#3
- このイベントには、スケジュール関連のテーブルに関連する行がありません
- このイベントには、スケジュール関連のテーブルに関連する行がありません
- 4番目は呼ばれます:event#4
- このイベントには、スケジュール関連のテーブルに関連する行が1つだけあります
上記のように、スケジュール内の最初の3つのイベントと関連するイベントを取得する必要があるのは私だけです