1

バンド、ギグ、会場の 3 つのテーブルがあります。バンド名、バンドの出身地、会場名で検索できるようにしたい。私のテーブルがどのように見えるかについての一般的な考え方は次のとおりです。

バンド

ID    |    NAME      |    LOCATION
------|--------------|------------
1     | Spinal Tap   | New York, NY
2     | Jimi Hendrix | Woodstock, PA

ギグ

ID    |    VENUE_ID    |    START_TIME    |    BAND_ID
------|----------------|------------------|--------------
1     |    1           |    1371171600    |    1
2     |    2           |    1371171600    |    1
3     |    1           |    1371171600    |    2
4     |    2           |    1371171600    |    1

会場

ID    |    NAME
------|---------------------
1     |  Madison Square Garden
2     |  Jefferson Round Garden

そのため、バンド名と場所で簡単に検索できます。何かのようなもの:

  SELECT id,name,location 
    FROM bands 
   WHERE name LIKE '%$search_string%' OR location LIKE '%$search_string%' 
ORDER BY name

会場名で検索できるようにしたい場合はどうすればよいですか? これが私の恐ろしく失敗した試みです:

    SELECT bands.id,bands.name,bands.location,venues.name 
      FROM bands 
     WHERE name LIKE '%$search_string%' OR location LIKE '%$search_string%' 
INNER JOIN gigs 
        ON bands.id=gigs.band_id 
INNER JOIN venues 
        ON gigs.venue_id=venues.id 
     WHERE start_time>'$now' 
  ORDER BY bands.name

私は明らかに、この内部結合全体に慣れていません...

4

2 に答える 2

2

あなたは近くにいました。微調整が必​​要です:

SELECT
  bands.id,
  bands.name,
  bands.location,
  venues.name
FROM bands
INNER JOIN gigs ON bands.id = gigs.band_id
INNER JOIN venues ON gigs.venue_id = venues.id
WHERE start_time>'$now'
  AND (
     bands.name LIKE '%whatever%' OR
     bands.location LIKE '%whatever%' OR
     venues.name LIKE '%whatever%'
      )

よりも優先順位が低いため、括弧内の括弧WHEREは重要です。ORAND

于 2013-06-19T21:26:49.043 に答える