2014-09-02 34 views
0
id  product main_image 
--- ---------- ----------- 
1  1   0 
2  1   0 
3  1   0 

4  2   0 
5  2   0 
6  2   0 

7  3   0 
8  3   0 
9  3   0 
10  3   0 

我想使用MySQL查詢,使表現場數據(對於main_image)這樣如何更新現場來自同一數據在MySQL

id  product main_image 
--- ---------- ----------- 
1  1   1 
2  1   0 
3  1   0 

4  2   1 
5  2   0 
6  2   0 

7  3   1 
8  3   0 
9  3   0 
10  3   0 

我該怎麼辦呢?我想爲產品設定一個主要圖像。 我有大約300萬的記錄,我想PHP的,但它的速度太慢

+0

鑑於主圖像總是第一個奇蹟爲什麼你需要t o做到這一點! – Strawberry 2014-09-02 09:32:05

+0

我使用Group by來獲得第一張圖片,但它對我來說並不有用,並使處理器很累,所以我設置了一個主圖像並使用了其中的位置。我需要一個200.000酒店的每一個主圖像在第一個視圖 – budamivardi 2014-09-02 09:48:27

回答

2

您可以使用子查詢來選擇較小的ID構成表:

UPDATE myTable 
SET main_image = 1 
WHERE id IN 
    (SELECT MIN(temp.id) 
    FROM (SELECT * FROM myTable) AS temp 
    GROUP BY temp.product) 
+0

顯示客戶Navicat給出錯誤「你不能指定目標表'yk_otel_hotel_pictures'在FROM子句中更新」 我的查詢 UPDATE yk_otel_hotel_pictures SET main =' 1'WHERE imageURL IN(SELECT imageURL FROM yk_otel_hotel_pictures GROUP BY hotelID) – budamivardi 2014-09-02 09:20:43

+0

Mysql不允許在同一張表上的子查詢中選擇,可以找到一個簡單的解決方案[here](http://stackoverflow.com/questions/4429319/)你不能指定目標表爲更新從條款),我做了一個編輯。 – 2014-09-02 09:26:46

+0

我想這有一個更優雅的寫法。 – Strawberry 2014-09-02 09:30:22

2

這...

UPDATE my_table x 
    JOIN 
    (SELECT product 
      , MIN(id) min_id 
     FROM my_table 
     GROUP 
      BY product 
    ) y 
    ON y.product = x.product 
    AND y.min_id = x.id 
    SET x.main_image = 1; 

...或只是這個...

UPDATE my_table x 
    JOIN 
    (SELECT MIN(id) min_id 
     FROM my_table 
     GROUP 
      BY product 
    ) y 
    ON y.min_id = x.id 
    SET x.main_image = 1; 
相關問題