Получить порядок результата запроса в соответствии с предложением IN в запросе в торт php или mysql - PullRequest
1 голос
/ 31 марта 2012

В торт php, как мы можем получить порядок результата запроса в соответствии с предложением 'IN' в запросе

$array = array(8,6); // order in 'In' clause
$condition = array('Video.id' => $array);
$videos = $this->Video->find('all', array('conditions' => $conditions));

//The query will be like below
SELECT * FROM `videos` AS `Video` WHERE `Video`.`id` IN (8,6);

В настоящее время это даст результат как

Array
(
    [0] => Array
    (
        [Video] => Array
        (
            [id] => 6
        )

    )

    [1] => Array
    (
        [Video] => Array
        (
            [id] => 8
        )

    )

)

Мне нужноэто как

Array
(
    [0] => Array
    (
        [Video] => Array
        (
            [id] => 8
        )

    )

    [1] => Array
    (
        [Video] => Array
        (
            [id] => 6
        )

    )

)

порядок Desc или asc не будет получать фактический результат в порядке.Как это может быть получено с помощью торт php?

Я использую торт php, можно ли это сделать в mysql?

Ответы [ 5 ]

2 голосов
/ 31 марта 2012

ORDER это опция в CakePHP?

$this->Video->find('all', array('conditions' => $conditions, 'order' => array('Video.id DESC')));

В ответ на комментарий:

$this->Video->find('all', array('conditions' => $conditions, 'order' => array('FIELD(Video.id, 7, 4, 9)')));
1 голос
/ 31 марта 2012
ORDER BY FIELD("videos"."id",8,6)

Я уверен, что вы можете использовать его в поиске торта

Вы даже можете использовать функцию ELT следующим образом:

ORDER BY ELT(videos.id, 8,1,6,2,n,3,.....)
0 голосов
/ 23 сентября 2014
SELECT * FROM table WHERE id IN (1,2,3,4,5)

Приведенный выше запрос может быть преобразован в CakePHP следующим образом:

<?php
    $ids = array(1,2,3,4,5);
    $this->Model->find('all', array('conditions' => array('Model.id' => $ids)));
?>
0 голосов
/ 31 марта 2012

Это прекрасно работает для меня

$order = array("FIND_IN_SET(Video.id, '8,6')");

$result = $this->Video->find('all', array('conditions' => $conditions,'order' => $order);
0 голосов
/ 31 марта 2012

Почему бы не написать

SELECT * FROM `videos` as `Videos` WHERE `Videos`.`id` IN (8,6) ORDER BY `Videos`.`id` DESC

Не рекомендуется использовать * в вашем SELECT утверждении. Дайте мне знать, если это поможет.

EDIT

При необходимости мы также можем отсортировать его другим методом

Order By Case `Video`.`id`
When 8 Then 1
When 1 Then 2
When 3 Then 3 
END
...