php - 使用 "sort"列排列 MySQL 表中的行

标签 php mysql sorting cycle

我使用表中的“排序”列在相册中排列照片。 这意味着相册将以“ORDER BY 排序”显示。

我有一个功能,允许用户通过在 javascript 中拖放照片,然后按“保存”按钮来排列相册中的照片。

一个数组(带有排序后的照片 ID)被发送到进程(在 PHP 中),然后我想对表格中的行重新排序。

我认为最简单的方法是:

for ($c=0; $c<$length; $c++) {
    mysql_query('UPDATE photos SET sort="'.$c.'" WHERE id="'.$array[$c].'"');
}

(请忽略此处的清理、重复和其他验证)

但我担心在这样的循环中进行的查询量。

您将如何改进这种方法?

谢谢。

最佳答案

首先,我认为发出多个查询没有任何问题。你测试了吗?您确定这将是性能瓶颈吗?我不这么认为。

但无论如何,解决方案 #1 是使用 REPLACEVALUES 子句一起使用。但是,在这种情况下,您需要为表的所有列显式指定数据,否则这些列中的数据将被删除(设置为默认值)。

解决方案 #2 只是为了好玩。我认为没有人会使用它,但仍然:

UPDATE photos
SET sort = (
  SELECT sort FROM (
    SELECT 1 id, 1 sort UNION
    SELECT 2 id, 2 sort UNION
    SELECT 123 id, 3 sort) t
  WHERE t.id = photos.id)
WHERE id IN (1, 2, 123)

解决方案 #3 实际上与 Zombaya 的相同:

UPDATE photos
SET sort =
  IF(id = 1, 1,
  IF(id = 2, 2,
  IF(id = 123, 3,
    0)))
WHERE id IN (1, 2, 123)

关于php - 使用 "sort"列排列 MySQL 表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10368239/

相关文章:

php - 未找到 Yii2 类

mysql - 选择 VARCHAR 字段时 JOIN 性能非常慢

php - 查询3个mysql表以创建HTML表

c++ - 向数组移动和添加元素

javascript - 按字母顺序对多个键上的javascript对象进行排序

php - trim() 期望参数 1 为字符串,数组中给出

php - 如何删除 Magento 分层导航中的计数?

php - 使用php在mysql中插入特殊字符

c# - 获取自增 PK 列的值

javascript - 更准确的顺时针顶点排序