Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка: отсортировать данные по списку IN
 
 автор: Красная_шляпа   (02.03.2011 в 13:08)   письмо автору
 
 

Имеется запрос вида:


SELECT `products`.`id` , `products`.`n1` , 
`products`.`n2` , `products`.`p1` , 
`products`.`p2` , `products`.`p3` , 
`products`.`p4` , `products`.`p5` , 
`products`.`p6` , `products`.`price` 
FROM `products` 
WHERE `products`.`id` 
IN ( 38, 5, 35, 51, 39, 7, 32, 52, 48, 6, 33, 53, 40, 2, 9, 
54, 49, 4, 11, 50, 3, 27, 46, 1, 20, 36, 12, 47, 19, 37, 
31, 41, 34, 42, 10, 43, 16, 44, 8, 45, 24, 14, 13, 18, 25, 
15, 28, 17, 30, 29, 26, 23, 22, 21 ) 
LIMIT 0 , 9;

Выводятся в результате данные отсортированные по id в порядке возрастания(1,2,3,4,5...9) как сделать чтобы выводились 38,5,35,51,39,7...48?

  Ответить  
 
 автор: Trianon   (02.03.2011 в 13:26)   письмо автору
 
   для: Красная_шляпа   (02.03.2011 в 13:08)
 

ORDER BY FIELD_SET()
ORDER BY FIND_IN_SET()

  Ответить  
 
 автор: Красная_шляпа   (02.03.2011 в 13:34)   письмо автору
 
   для: Trianon   (02.03.2011 в 13:26)
 

спасибо



select `products`.`id`, `products`.`n1`, 
`products`.`n2`, `products`.`p1`, 
`products`.`p2`, `products`.`p3`, 
`products`.`p4`, `products`.`p5`, 
`products`.`p6`, `products`.`price` 
from `products` 
where `products`.`id` in (38, 5, 35, 51, 39, 7, 32, 52, 48,
 6, 33, 53, 40, 2, 9, 54, 49, 4, 11, 50, 3, 27, 46, 1, 20, 
36, 12, 47, 19, 37, 31, 41, 34, 42, 10, 43, 16, 44, 8, 45, 
24, 14, 13, 18, 25, 15, 28, 17, 30, 29, 26, 23, 22, 21) 
order by field(`products`.`id`, 38, 5, 35, 51, 39, 7, 32, 
52, 48, 6, 33, 53, 40, 2, 9, 54, 49, 4, 11, 50, 3, 27, 46, 
1, 20, 36, 12, 47, 19, 37, 31, 41, 34, 42, 10, 43, 16, 44, 
8, 45, 24, 14, 13, 18, 25, 15, 28, 17, 30, 29, 26, 23, 22, 
21) limit 0, 9;
извращение конкретное получилось, но то пожелания клиента

  Ответить  
 
 автор: Красная_шляпа   (02.03.2011 в 13:59)   письмо автору
 
   для: Красная_шляпа   (02.03.2011 в 13:34)
 

а это фрагмент кода


// <?php
// сложная выборка надо чтобы товары были отсортированы по цене, при этом две модели от одного производителя не должны идти подряд
        
$a = array();
        
$q $db->query("select `products`.`id`, `products`.`pid` from `products` left outer join `producers` on `products`.`pid` = `producers`.`id` 
order by `producers`.`sort_id`, `producers`.`id`, 
`products`.`price` asc, `products`.`id` desc;"
);
        
$tmp $q->fetchAll(2);
        foreach (
$tmp as $v) {
            
$a[(int) $v[1]][] = (int) $v[0];
        }
        
$c = array();
        foreach (
$a as $id => $arr) {
            
$c[$id] = count($arr);
        }
        
$k max($c);
        
$c array_keys($c);
        
$tmp = array();
        
$m count($c);
        for (
$i 0$i $k; ++$i) {
            for (
$l 0$l $m; ++$l) {
                if (isset(
$a[$c[$l]][$i])) {
                    
$tmp[] = $a[$c[$l]][$i];
                }
            }
        }
        
$count count($tmp);
        
$sql "select `products`.`id`, `products`.`n1`, `products`.`n2`, `products`.`p1`, `products`.`p2`, 
`products`.`p3`, `products`.`p4`, `products`.`p5`, `products`.`p6`, `products`.`price` from `products`
 where `products`.`id` in ("
.implode(", "$tmp).") order by field(`products`.`id`, ".implode(", "$tmp).") limit $start, 9;";
        
$q $db->query($sql);
        
$products $q->fetchAll("obj");

// ...



А средствами SQL тоже самое сделать то можно?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования