|
|
|
|
|
для: Красная_шляпа
(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 тоже самое сделать то можно? | |
|
|
|
|
|
|
|
для: 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:08)
| | ORDER BY FIELD_SET()
ORDER BY FIND_IN_SET() | |
|
|
|
|
|
|
| Имеется запрос вида:
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? | |
|
|
| |
|