2014-09-02 50 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; 
相关问题