【问题标题】:PHP order by clause with array as order by statementPHP order by 子句,数组作为 order by 语句
【发布时间】:2013-07-11 12:59:48
【问题描述】:

我得到了一个带有查询的数组

此数组按条件排序。

现在我想做一个新的查询

样本

$array = (987, 2661, 12, 789, 54);

我想按这个顺序排列选择文章

select * from article a.number WHERE (a.number IN ($array))

我怎么知道这个结果是按 $array ids 排序的?

谢谢你 4 个回答的家伙 :)

编辑:

Article Table:
id, name etc..

Property Table:

id, article_id, name, value

1,        10,   journey_days, 2
2,        30,   journey_days, 1
3,        40,   journey_days, 5
1,        10,   stars,        2
2,        10,   stars,        4
3,        10,   stars,        0
4,        10,   stars,        1

我加入了两个表,但正如您所见,对于一篇文章,该属性的每列有一个以上的值。

我需要将属性表加入到文章表中,并获取从属性表到文章的所有值,如果我创建 where 子句,我只会得到星星或旅程天数。

我怎样才能意识到这一点?使用 where 或 on 子句选择所有 property.name 值?

希望大家理解我的问题

【问题讨论】:

    标签: mysql arrays list select


    【解决方案1】:

    使用implode:

    $s = implode(",", $array);
    $q = "select * from article a.number WHERE (a.number IN ($s))";
    

    【讨论】:

    • 问题是,如何得到数组中按数字排序的结果?
    • 恐怕这是不可能的。您可以在自己的SELECT 中获取每条记录,或者引入某种orderby 列。
    • 我得到了 2 个查询,一个按列排序,然后取回 id 并将它们放入一个数组中,然后我想通过这个数组列表获取文章
    • @Wykk 为什么不加入这两个表,只有一个查询?
    • @Wykk 如果您可以转发该问题,人们会帮助您。多次加入一个表,甚至加入一个表本身也是完全有效的。
    【解决方案2】:

    您可以构造一个 CASE 表达式并按此排序,但最好在数据库之外的 PHP 中执行此操作。

    ... ORDER BY CASE a.number 
             WHEN 987   THEN 1
             WHEN 2661  THEN 2
             WHEN 12    THEN 3
             WHEN 789   THEN 4 
             WHEN 54    THEN 5
             END;
    

    或者你可以使用FIND_IN_SET函数:

    .... ORDER BY FIND_IN_SET(a.number, "987,2661,12,789,54");
    

    【讨论】:

    • 否决票的任何理由?据我所知,这完美地回答了这个问题。
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多