簡體   English   中英

MySQL查詢返回所有行。 為什么?

[英]Mysql query returns all rows. Why?

SELECT SQL_CALC_FOUND_ROWS o . * , titles.title AS title, categories.category AS category,

images.image AS image, urls.url AS url, descriptions.description AS description,

from_sites.from_site AS from_site, prices.price AS price

FROM oglasi AS o

LEFT JOIN titles ON o.title_id = titles.title_id

LEFT JOIN categories ON o.category_id = categories.category_id

LEFT JOIN images ON o.image_id = images.image_id

LEFT JOIN urls ON o.url_id = urls.url_id

LEFT JOIN descriptions ON o.description_id = descriptions.description_id

LEFT JOIN from_sites ON o.from_site_id = from_sites.from_site_id

LEFT JOIN prices ON o.price_id = prices.price_id

WHERE categories.category_id = "28"

OR categories.category_id = "29"

OR categories.category_id = "30"

OR categories.category_id = "31"

OR categories.category_id = "32"

OR categories.category_id = "33"

OR categories.category_id = "34"

OR categories.category_id = "35"

AND from_sites.from_site_id =7

ORDER BY o.izdvojen, titles.title ASC

唯一的問題是AND AND_sites.from_site_id = 7被忽略。 因此,它列出了所有站點的所有子類別。 但是,當我僅使用一個category_id和from_site_id嘗試相同的查詢時,它將按預期工作。

可以請人告訴我這是怎么了嗎?

您需要使用括號明確告訴MySQL首先要計算哪些子句。

嘗試這個:

WHERE (categories.category_id = "28"
OR categories.category_id = "29"
OR categories.category_id = "30"
OR categories.category_id = "31"
OR categories.category_id = "32"
OR categories.category_id = "33"
OR categories.category_id = "34"
OR categories.category_id = "35")
AND from_sites.from_site_id =7

或類似的東西,如果這不完全是您的意思。

嘗試使用括號來指示如何評估邏輯運算。

如果您想要的東西屬於任何列出的類別,並且除此之外,from_site_id = 7,那么您的where部分應如下所示:

WHERE (
      categories.category_id = "28"
      OR categories.category_id = "29"
      OR categories.category_id = "30"
      OR categories.category_id = "31"
      OR categories.category_id = "32"
      OR categories.category_id = "33"
      OR categories.category_id = "34"
      OR categories.category_id = "35"
      )
      AND from_sites.from_site_id =7

您當前的查詢是要返回的所有行,其中category_id = 28-34 OR來自類別35且fromSiteID = 7(因此,除categoryID 35以外的所有內容都將忽略fromSiteID條件)。

原始查詢中似乎不需要很多東西。 我可以建議一個簡化版本嗎?

SELECT title, category, image, url, description, from_site, price
FROM oglasi
LEFT JOIN titles USING (title_id)
LEFT JOIN categories USING (category_id)
LEFT JOIN images USING (image_id)
LEFT JOIN urls USING (url_id)
LEFT JOIN descriptions USING (description_id)
LEFT JOIN from_sites USING (from_site_id)
LEFT JOIN prices USING (price_id)
WHERE category_id IN (28,29,30,31,32,33,34,35) AND from_site_id =7
ORDER BY izdvojen, title

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM