Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вывод из базы по определенным параметрам учитывая другие параметры
Форумы портала PHP.SU » » Работа с СУБД » Вывод из базы по определенным параметрам учитывая другие параметры

Страниц (3): [1] 2 3 »
 

1. dropoff - 25 Октября, 2011 - 00:40:15 - перейти к сообщению
Доброго времени суток!

Ребята, такой вопрос

Стандартно вывод после захода в категорию товаров идет по цене по возрастанию.
То есть: цена 10, цена 27, цена 56 и т.д...
Так же есть возможность отсортировать по имени товара ASC, DESC.

Но! У каждого товара есть статус, в котором указывается: есть ли этот товар в наличии или нет.

Так вот.
Мне нужно, чтобы товар который Есть в наличии всегда был первым в списке при любой сортировке.
Сортирую я к примеру по Названию товара и первые товары в списке те, которые есть в наличии, далее которые Под заказ, далее, которых Нет в наличии.

Это для того, чтобы товар который Есть в наличии всегда был первый. А то получается, что он разбросан по всему списку.

|Сортировка по имени->
|--Сортировка по имени со статусом Есть в нал.->
|Сортировка по имени->
|--Сортировка по имени со статусом Нет в наличии->
|Сортировка по имени->
|--Сортировка по имени со статусом Под заказ

Это как бы условный список такой)

реально ли такое только запросом сделать?

PS. Если вдруг не очень понятно, то я про ORDER BY.
Ситуация, когда вывод отсортирован по name, но иерархия нужна как описано выше (как бы ступенчато).
2. LIME - 25 Октября, 2011 - 03:56:38 - перейти к сообщению
интересно почему подобные вопросы остаются без ответа?
ваши варианты...
3. dropoff - 25 Октября, 2011 - 04:00:33 - перейти к сообщению
Вы так тонко намекнули о том, что я не понятно описал? ))
4. LIME - 25 Октября, 2011 - 04:10:06 - перейти к сообщению
да
много воды
даже неохота вникать
может когда буду трезвей
но врядли ))
(Добавление)
dropoff конкретней
сосредоточьтесь))
5. dropoff - 25 Октября, 2011 - 04:19:11 - перейти к сообщению
))

я про ORDER BY

Стандартно вывод после захода в категорию товаров идет по цене по возрастанию.
То есть: цена 10, цена 27, цена 56 и т.д...
Так же есть возможность отсортировать по имени товара ASC, DESC.

Но! У каждого товара есть статус, в котором указывается: есть ли этот товар в наличии или нет.

Так вот.
Мне нужно, чтобы товар который Есть в наличии всегда был первым в списке при любой сортировке.
Сортирую я к примеру по Названию товара и первые товары в списке те, которые есть в наличии, далее которые Под заказ, далее, которых Нет в наличии.

Это для того, чтобы товар который Есть в наличии всегда был первый. А то получается, что он разбросан по всему списку.

Надеюсь теперь понятно изложил.

зы. перечитал первый пост и понял, что погнал)
6. LIME - 25 Октября, 2011 - 04:23:37 - перейти к сообщению
судя по вашему ответу на мой пост я могу сделать вывод что вы не глупый человек
в связи с этим должен принести извенение за легкое принебрежение проявленое в моем посте
и советую конкретезировать вопрос
уж очень неохота читать так много буков))
либо переформултруйте либо сообщите что ваш вопрос требует вдумчивого чтения
обещаю помочь по мере знаний
надеюсь на правильное прочтение моего последнего поста
(Добавление)
dropoff статус это отдельное поле?
какие значения принимает?
(Добавление)
предлагаю сделать поле статус тини инт
и вывод будет ордер бай поле статуса
...детская задача
(Добавление)
индексировать статус не надо
(Добавление)
ответил?
7. dropoff - 25 Октября, 2011 - 04:32:53 - перейти к сообщению
В базе, у товара есть поле status
0 нет в наличии
1 есть в наличии
2 под заказ

но выводить ВСЕГДА нужно 1, 2, 0 именно в таком порядке.
При этом учитываю сортировку, которой может воспользоваться юзер, например по name или price
8. LIME - 25 Октября, 2011 - 04:32:56 - перейти к сообщению
или вам прям запрос составить? тогда давайте структуру таблицы
(Добавление)
dropoff пишет:
0 нет в наличии
1 есть в наличии
2 под заказ
смените на
2 нет в наличии
0 есть в наличии
1 под заказ
и нет проблем
(Добавление)
а хотите я завтра протрезвею мы свяжемся по скайпу и я наведу порядок в вашей базе
так будет проще
9. dropoff - 25 Октября, 2011 - 04:39:02 - перейти к сообщению
В том то и дело, что уже не сменить. Делали, через одно место.
Там загоняются товары с нужным статусом через софтину, заточенную под магаз.

Таблица такая
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `products` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `title` varchar(255) DEFAULT NULL,
  4.   `status` int(11) NOT NULL DEFAULT '0',
  5.   `price` varchar(255) DEFAULT NULL,
  6.   `url` varchar(255) DEFAULT NULL,
  7.   PRIMARY KEY (`id`)
  8. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;


Я бы с удовольствием, да скайпа нет(
10. LIME - 25 Октября, 2011 - 04:47:59 - перейти к сообщению
dropoff вполне нормальная база
можете дать мне координаты я свяжусь с вами сам
обсудим выборку
не падайте духом )) тут просто на самом деле))
(Добавление)
если неоднозначная сортировка значит выведем из массива
кал вопрос
11. tuareg - 25 Октября, 2011 - 10:08:48 - перейти к сообщению
Попробуйте так SELECT ........ ORDER BY FIELD('status', '1','2','0'),`price`;
<---->По возможности оптимизация---->
Сделайте `status` tinyint(1) NOT NULL DEFAULT '0'
Если есть возможность `price` varchar(255) DEFAULT NULL, сделайте int() и просто при вызове добавляйте 'цена '.$cena
<--->
Сделайте index по полю status и price.
12. snikers987 - 25 Октября, 2011 - 10:44:44 - перейти к сообщению
Кто-то там вчера о вежливости писал=) Закатив глазки
13. tuareg - 25 Октября, 2011 - 10:45:02 - перейти к сообщению
Во-первых, сделайте индекс по полю status И price.
14. LIME - 25 Октября, 2011 - 10:46:51 - перейти к сообщению
tuareg пишет:
индекс по полю status
ничего не смущает?
15. tuareg - 25 Октября, 2011 - 10:47:36 - перейти к сообщению
И еще Вы уверены, что при использовании Вашего способа будет использоваться индекс?
В моем, если не сортировать всю таблицу Да

 

Powered by ExBB FM 1.0 RC1