Kullanmak için katılın anahtar kelime arama, birden çok tablo, PHP ve MySQL,?

2 Cevap php

I have 3 tables event, location, event_location. Event can have multiple locations. Location table has lattitude, longitude, hasGeocode fields.

böylece anahtar kelimeler "merhaba dünya"

Olay tablo basit bir sorgu olur

Select * from event where keywords like '%hello%' OR keywords like '%world%'

ancak kullanıcı kendi konumunu girmiş, sonra ben kullanıcıların konum seçtikleri belirleyebilirsiniz, böylece de bu sorguda yer tablo eklemek istiyorsanız eğer, ben bunu nasıl yapabilirim?

arama sorguları yüzden aslında 3 tip

  • Sadece anahtar kelimeler

  • anahtar kelimeler ve konumu

  • anahtar kelimeler, yakınlık ve konum

Ben böyle bir şey denedim -

   select * from event where keywords like '%hello%' OR
   keywords like '%world%' INNER JOIN location ON 
   location.location_id = event_location.location_id 
   INNER JOIN 
   event_location ON event_location.event_id = event.event_id

İÇ olay bir veya daha çok yeri var anlamına Joın. Bir olay herhangi bir yer var değilse, o alışkanlık arama sonuçlarında görünür. Yani bana yardım edin, ben bunu nasıl yapabilirim?

Senin için teşekkürler yardımcı olur.

2 Cevap

Size katılmak sözdizimi tüm kadar karıştırılmış var. Her durumda, iç katılırsa dış birleşimler kullanmak, kesme işlemi değildir. ;-)

SELECT
  *
FROM
  event AS e
  LEFT JOIN event_location AS el ON el.event_id = e.event_id
  LEFT JOIN location       AS  l ON l.location_id = el.location_id
WHERE
  e.keywords LIKE '%hello%' 
  OR e.keywords LIKE '%world%'

Ayrıca, tablo adların kullanımı, tablo isimleri uzun, özellikle de kötü bir fikir değildir.

LEFT JOIN s kullanın (Ben senin katıldı sırasını değişmiş ve yanlış oldu nerede fıkra konumu, sabit)

select * from event LEFT JOIN event_location ON 
event.event_id = event_location.event_id 
LEFT JOIN 
location ON event_location.location_id = location.location_id
where keywords like '%hello%' OR
keywords like '%world%'

Bu şekilde yeri olmayan olaylar için NULL'ları alırsınız.

Ayrıca, seçin * kullanın ama ilgilendiğiniz sütunları isim değil deneyin