【问题标题】:I need to pull data based on its exact sequence in an array我需要根据数组中的确切顺序提取数据
【发布时间】:2016-02-28 03:39:49
【问题描述】:

下面是我的代码,我想根据序列 3、10 然后 7 提取数据,我该怎么做?到目前为止,它先拉了 10 个,然后是 7 个,然后是 3 个。

<code>
        $cars = $this->car->find('all', array(
        'conditions' => array(
            'car.id' => array(3, 10, 7)
        ),
        'limit' => 3, 
        'order' => array('car.id' => 'desc')
    ));

    </code>

【问题讨论】:

    标签: php mysql cakephp


    【解决方案1】:

    这个想法是按照它们在数组中的各自位置对结果进行排序。在这种情况下,MySQL FIND_IN_SET 函数可以帮助您。

    您可以通过语句添加以下顺序:

    ORDER BY FIND_IN_SET(car.id,'3,10,7')
    

    注意:您需要在等效的 cake php mysql 查询中转换此 order by 语句。

    MySQL FIND_IN_SET() 返回字符串的位置(如果存在) (作为子字符串)在字符串列表中。字符串列表本身是一个 字符串包含由“,”(逗号)字符分隔的子字符串。

    当搜索字符串不存在时,该函数返回 0 字符串列表,如果任一参数为 NULL,则返回 NULL。

    FIND_IN_SET

    示例输入:

    查询:

    SELECT *
    FROM cars
    

    id
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    

    输出:

    查询:

    SELECT *
    FROM cars
    WHERE cars.id IN (3,10,7)
    ORDER BY FIND_IN_SET(cars.id,'3,10,7')
    

    id
    3
    10
    7
    

    查看SQLFIDDLE DEMO here

    编辑:

    我不知道CAKE PHP syntax在构建mysql查询。

    cake php mysql 中的等效查询可能是这样的:

    $cars = $this->car->find('all', array(
            'conditions' => array(
                'car.id' => array(3, 10, 7)
            ),
            'limit' => 3, 
            'order' => array(FIND_IN_SET('car.id' , '3,10,7'))
        ));
    

    【讨论】:

    • 我需要 cakephp 代码而不是 mysql 代码。另外我尝试了 FIND_IN_SET 并且我有一个错误 Call to undefined function FIND_IN_SET()
    • 我不知道cake php。看看这个post。它可能会对你有所帮助。
    • 请看我回答中的编辑部分。它也可能有帮助。 @丹妮
    • Subrata,还是不行,你能验证一下你的代码吗,我觉得那里少了点什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多