【问题标题】:Sorting from an array从数组排序
【发布时间】:2022-01-24 02:41:59
【问题描述】:

我从其他数据库中获取了我的数据,将其添加到数组中并内爆:

$userStr = implode("', '", $rows);

它的排列方式像('1024','953','2034'),但是当我尝试查询它并显示结果时:

$query = "SELECT * FROM books WHERE id in('$userStr') LIMIT $start_from, $limit";

$bookselect = mysqli_query($conn, $query);

结果将根据这些值按 ASC 顺序排列显示。

('953','1024','2034')

是否有根据其在数组上的排列显示结果?

【问题讨论】:

  • 在您的查询中,您没有添加任何 order by 子句。您能否提供更多详细信息,以便我为您解决问题?
  • 这些值实际上是我从另一个数据库中检索到的 id,我 imploded $userStr = implode("', '", $rows);然后将那些添加到查询中,我将根据这些 id 在其他表上检索项目,这些值按照首先插入的人排列在数组中。也是应该如何排列和展示的

标签: php mysql


【解决方案1】:

MySQL 支持 ORDER BY FIELD(...) 表达式完全适合您的情况:

SELECT * FROM books WHERE id in('$userStr') ORDER BY FIELD(id, '$userStr') LIMIT $start_from, $limit"

附:对您的The result will be displayed based on the arrangement of those values in ASC order 回复的旁注:如果您不指定任何顺序,则 MySQL 不保证任何特定顺序。大多数时候你可能会看到 ASC,主要是因为你的 MySQL 查询优化器使用 PRIMARY 索引进行一些内部操作。同时,如果您在查询中未提及 ORDER BY,则永远不要期望任何特定顺序。

【讨论】:

  • 谢谢!现在是按升序排列的,有什么办法可以逆转吗?按 DESC 顺序
  • 哦,nvm,尝试在最后添加 DESC,它就像你之前所说的那样工作,如果没有指定它会自动将其设置为 asc
  • 您也可以在拨打implode 之前使用$rows = array_reverse($rows),这取决于您。
【解决方案2】:

ORDER BY FIELD() 应该适用于您的情况

$query = "SELECT *
FROM books
WHERE id in('$userStr')
ORDER BY FIELD(id, '$userStr')
LIMIT $start_from,$limit";

$bookselect = mysqli_query($conn, $query);

FIELD() 是一个函数,如果您要搜索的值存在,则返回逗号分隔列表的索引位置。如果您的搜索结果中有不属于$userStr 的值,那么它会将其添加到结果的开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多