我加入3個表。最後一個包含每個項目的幾張照片。這個想法是每個項目只獲得一個記錄,隨機選擇一張照片。 ORDER變化,WHERE變化。 我能得到的最好的是一個子查詢。 還有一個更有效的方法呢?任何MySQL大師在那裏?組後命令(替代subquerys)
SELECT *
FROM (
SELECT *
FROM art
LEFT JOIN prov USING (provID)
LEFT JOIN photos USING (artID)
WHERE artBrand = "Shimano" AND catID=5 AND (stock1>0 OR stock2>0) AND itemName LIKE "%20mm%"
//the WHERE changes wildly, this is only an example
ORDER BY rand() // sometimes is rand, sometimes price, sometimes stock...
)rand
GROUP BY artID // this is the only reasonable way i've got so far to avoid duplicates when an article has more than 1 photo
極限X1 //有異,有時我需要顯示符合搜索查詢的所有文章,有時我只需要幾個(5或10)
重要說明:此查詢WORKS。但我需要一個更有效的方式來做到這一點。子查詢非常昂貴。
更新:
- 我需要一個不同的照片,每次
- 我看着一個最快的查詢(這是我的問題點)。
- 產品的分類有所不同,有時我需要使用價格,有時候這個名稱,有時是隨機的...
- 有些文章沒有照片,這就是爲什麼我使用左連接。我不能讓他們出去。
- 有些文章有10,15甚至20張照片。
- 但在某些場合,我需要證明只 articled 與照片
- 的WHERE最多可以有20個條件,並得到非常複雜。這只是一個簡化。
簡化表結構:
Table art
artID: int
artName: varchar
artBrand: varchar
artPrice: decimal
provID: int
photo: int (when there is at least one available photo this is set to 1)
many more rows
Table prov
provID: int
provName: varchar
many more rows
Table photos
artID: int
thumb: varchar
normal: varchar
big: varchar
nothing fancy
你能否也顯示你的表格結構? – Zed 2009-09-19 10:14:38
當你說「隨意」時,你是否希望它每次都有所不同,或者你是否不在乎它是什麼,即使它每次都是一樣的? – 2009-09-19 10:32:17
@Josh:我需要每次都會有所不同。 – 2009-09-20 03:11:14