0

対応する list_id と position を含む画像のテーブルがあります。

image_name、listing_id、position

  • 1 つの listing_id に複数の画像を含めることができます。
  • 各画像には、表示順序を表す整数位置があります

listing_id の位置 1 に画像がない場合、その list_id の最も低い位置を取り、位置 1 に設定したいと思います。

何かのようなもの:

update media_table set position = 1 where ...
4

3 に答える 3

3

@ypercube による構文修正により、クエリが MySQL で機能するようになりました。

UPDATE media_table m
JOIN (
    SELECT listing_id, min(position) AS position
    FROM   media_table
    GROUP  BY listing_id
    HAVING min(position) > 1
    ) x ON (m.listing_id, m.position) = (x.listing_id, x.position)
SET    m.position = 1;

説明:

サブクエリlinsting_idで、最小値positionが 1 より大きい場所をすべて検索します。これらの結果を使用して、行をすぐに更新します。(listing_id, position)ユニークだと思います。

MySQL の動作デモを参照してください。

于 2012-04-10T17:52:57.117 に答える
0

これを試してみてください:

update images i1,
( select i1.image_name, i1.listing_id from images i1
  left join images i2
  on i1.listing_id = i2.listing_id and i1.position > i2.position
  where i2.position is null and i1.position != 1
) f
set position = 1
where i1.image_name = f.image_name and i1.listing_id = f.listing_id;

これは、でレコードを識別できることを前提としていますimage_name, listing_id。それまでにそうすることができれば、比較と選択image_nameを削除できるので、クエリはより簡単になります。listing_id

于 2012-04-10T18:04:55.087 に答える
0
UPDATE media_table
SET position=(SELECT MIN(position) FROM media_table)
WHERE listing_id IS NULL;
于 2012-04-10T17:51:01.363 に答える