Помогите, пож-та, сделать запрос mysql_query

P
На сайте с 06.01.2009
Offline
601
542

Здравствуйте.

В страницу выводятся товары. Нужно собрать id товаров в массив в таком порядке:

1. сперва отсортировать по полю hit=1 +одновременно по name.

2. Далее, как только hit=1 товаров больше нет, (остались только с "0") нужно записать все остальные id отсортированные по цене.

Обойтись можно только 2-мя запросами? В одном все это не скомбинировать, да?

Не могу понять, такая конструкция рабочая вообще...спасибо

// $start = номер страницы x $per_page

// $per_page = 20; по 20 товаров в странице


$result17 = mysql_query("SELECT idvkat FROM `katalog` WHERE hit='1' order by `name` LIMIT $start, $per_page");
$vsego17 = mysql_num_rows($result17);
$ostatoknajti = $per_page-$vsego17;
$spmass1 = mysql_fetch_array($result17, MYSQL_ASSOC);


if ($ostatoknajti>0) {
$result18 = mysql_query("SELECT idvkat FROM `katalog` WHERE hit!='1' order by `zena` LIMIT $start, $ostatoknajti");
$vsego18 = mysql_num_rows($result18);
$spmass2 = mysql_fetch_array($result18, MYSQL_ASSOC);
$spmass3 = array_merge ($spmass1, $spmass2);
} else {$spmass3 = $spmass1;}

// в итоге в $spmass3 список из id как надо или все таки нет...не могу разобраться.

L
На сайте с 10.02.2015
Offline
248
#1

Полуоффтоп:

1. Завязывайте с транлитерированными именами (у многих аллергия на такое).

$result18 - тоже очень информативное название.

2. >mysql_fetch_array($result18, MYSQL_ASSOC);

можно mysql_fetch_assoc($result18);

Aisamiery
На сайте с 12.04.2015
Offline
315
#2
postavkin:
Здравствуйте.

В страницу выводятся товары. Нужно собрать id товаров в массив в таком порядке:
1. сперва отсортировать по полю hit=1 +одновременно по name.
2. Далее, как только hit=1 товаров больше нет, (остались только с "0") нужно записать все остальные id отсортированные по цене.

Обойтись можно только 2-мя запросами? В одном все это не скомбинировать, да?

Не могу понять, такая конструкция рабочая вообще...спасибо
// $start = номер страницы x $per_page
// $per_page = 20; по 20 товаров в странице

$result17 = mysql_query("SELECT idvkat FROM `katalog` WHERE hit='1' order by `name` LIMIT $start, $per_page");
$vsego17 = mysql_num_rows($result17);
$ostatoknajti = $per_page-$vsego17;
$spmass1 = mysql_fetch_array($result17, MYSQL_ASSOC);


if ($ostatoknajti>0) {
$result18 = mysql_query("SELECT idvkat FROM `katalog` WHERE hit!='1' order by `zena` LIMIT $start, $ostatoknajti");
$vsego18 = mysql_num_rows($result18);
$spmass2 = mysql_fetch_array($result18, MYSQL_ASSOC);
$spmass3 = array_merge ($spmass1, $spmass2);
} else {$spmass3 = $spmass1;}


// в итоге в $spmass3 список из id как надо или все таки нет...не могу разобраться.

А чем вас один запрос не устраивает?



$query = sprintf("SELECT idvkat FROM `katalog` ORDER BY `hit` DESC, `name` LIMIT %d, %d;", (int) $start, (int) $per_page) ;

$result = mysql_query($query);
$products = mysql_fetch_array($result, MYSQL_ASSOC) ?: array();
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
ДП
На сайте с 23.11.2009
Offline
203
#3

Aisamiery, у ТС условие, что для товаров с hit=0 надо сортировать по цене.

Теоретически можно поиграться либо с UNION, либо с функцией FIELD(), либо с IF.

Не уверен, правда, что можно IF использовать в сортировке, а даже если и можно - что будет быстрее работать.

Aisamiery
На сайте с 12.04.2015
Offline
315
#4

Да, не обратил внимание.

Тогда лучше 2 запросами. А еще лучше 2 разными функциями, для того что бы выводить товары с полем hit не только в этом месте, а в принципе где угодно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий