2010-11-18 19 views
0
SELECT DISTINCT business.name AS businessname 
     ,business.description AS description 
FROM business 
     , category 
     , sub_categories 
WHERE business.cityID = '$city' 
     AND (category.name LIKE '%$name%' 
      OR sub_categories.name LIKE '%$name%') 
     AND business.status = 0 

Yukarıdaki SQL kodunun, iki tablodan oluşan bir grubu aralarında bulunanları aradığını ve sonucu döndürdüğünü varsayalım, ancak bir sebepten dolayı, bunu yapmıyor. Neyi yanlış yapıyorum?Sorguda birden çok tablo arama

Teşekkür ederiz.

+1

Bunun yerine ne yapıyor? Herhangi bir hata? Farklı sonuçlar? – deceze

+0

@deceze Varsayılan olarak 5 sonuç döndürüyor. Ayrı bir anahtar kelime olmadan, şehirle eşleşen her bir kaydı, şehre ve belirli kategorilere veya alt kategorilere karşılık gelen geri dönüş durumlarına karşı döndürür. @Haim Evgi, yapacak. Teşekkürler – Cyberomin

+0

cityID muhtemelen bir sayıdır. Eğer öyleyse '$ city' tırnak içine girmez. –

cevap

2

Sorunuz cartesian product üretir. Tablolarınızın büyüklüğüne bağlı olarak önemli miktarda zaman alabilir.

Açıklamalarınıza dayanarak, eşleşen kategorileri kontrol etmek için bir alt sorgu kullanırdım. Böylece, her bir işi yalnızca bir kez iade edeceğinden, sorgunuzda ayrı olarak kullanmak zorunda kalmazsınız. Ayrıca iyi bir SQL öğreticisi ile başlamanızı öneririm.

SELECT name AS businessname 
     ,description AS description 
FROM business 
WHERE cityID = '$city' 
AND  status = 0 
AND ( categoryID in (select id from category where name like '%$name%') 
    or subcategoryID in (select id from sub_categories where name like '%$name%') 
) 
+0

@Martin girişine sahip Kategori veya alt kategorisine dayalı bir şekilde tanımlanmasıdır. İş tablosu, kategori kimliğine ve alt kategorilere aittir. iş tablosundaki anahtarlar. Sorgunun amacı, işletme adını ve tanımını şehir kimliğine ve girilen Kategori veya alt kategoriye dayanarak açıklamaktır. – Cyberomin

+0

@Martin, kodu benim için yeniden yazabilir misin? Teşekkür ederim. BUSINESSNAME OLARAK – Cyberomin

+0

SEÇ business.name iş İTİBAREN açıklaması OLARAK \t business.description business.cityID = 1 VE 'status' = 0 VE içinde (business.catID (kategorisinden id seçmek NEREDE nerede' gibi name' ' % Hotels% ') ya da business.subCatID içinde (' '$ $ Hotels%' gibi bir isim 'alt öğesi kategorilerinden kimliği seçin) ), ancak herhangi bir sonuç döndürmüyor. – Cyberomin

0

İki şey akla gelen: Birlikte üç tablo herhangi katılmadan değildir

  1. . Birkaç SOL JOIN paragraf eklemeyi düşünün.
  2. Yalnızca bir tablodan sütun seçiyorsunuz. Diğer tablolardan sütunlar istiyorsanız, bunları SELECT yan tümcesine eklemelisiniz.
+0

Yanıtlarınız için teşekkürler, pls sql'i benim için doğru şekilde biçimlendirebilir. Teşekkürler. – Cyberomin

+0

"Biçim" ile ne demek istiyorsun? – cdhowie

+0

Tamam, kodun doğru yolunun, JOIN'ler ve hepsi ile yazılması gerektiğini varsayalım. İşte ilişki var; iş tablosu, kategori kimliğine ve alt kategori kimliğine sahiptir, diğer deyişle, bunların hepsi, iş tablosundaki tüm yabancı anahtarlardır. Sorunun amacı, işletme adı ve tanımının, şehir kimliğine ve – Cyberomin

İlgili konular