1

「イベント」テーブルと「写真」テーブルがあります。各イベントには、「写真」テーブルのイベントに対応するレコードが0個または多数ある場合があります。次のSQLは、イベントごとに個別の結果を示します。

写真をイベントの単一のフィールドに集約して、各結果が一意のイベントになり、phpの$ event ['photos']などから写真にアクセスできるようにするにはどうすればよいですか?

SELECT e.title, e.eid, p.pid
FROM events e
RIGHT JOIN photos p ON p.aeid = e.eid
WHERE e.dateTimeStart >= $start_date_time AND e.dateTimeStart <= $end_date_time
4

1 に答える 1

2

MySqlを使用しているため、GROUP_CONCAT集計関数を使用するオプションがあります。

SELECT e.title, e.eid, GROUP_CONCAT(p.pid) AS pids
FROM events e
LEFT JOIN photos p ON p.aeid = e.eid
WHERE e.dateTimeStart >= $start_date_time AND e.dateTimeStart <= $end_date_time
GROUP BY e.title, e.eid

ただし、1つの列に複数の値を格納すると、最初の正規形に違反することに注意してください。関数を使用する前に、これを他の懸念事項と比較検討してください。データをこの形式で格納GROUP_CONCATしないでください。

RIGHT JOINまた、...に変更されていることに注意してください。これは、麻酔上の理由だけでなく、必要な行であるため、必要なLEFT JOIN機能であると思います。eventsphotoszero to many

于 2013-03-11T19:37:04.833 に答える