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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Условия в запросе mySql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Sankaboy
Отправлено: 28 Сентября, 2013 - 12:49:12
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Здравствуйте! Есть такая задача:
Существует запрос:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id` FROM `table` WHERE `on` = '1' AND `launched` = '1'  LIMIT ".$start.", ".$num."
  3.  


Данный запрос нужно модифицировать в плоть до того, что когда в таблице `table` заканчиваются поля для вывода с условиями: `on` = '1' AND `launched` = '1', то запускалось условие вывода: `on` != '1' AND `launched` != '1'.
Возможно эту задачу реализовать не посредственно силами mySql, а не php? За раннее спасибо!
 
 Top
LIME
Отправлено: 28 Сентября, 2013 - 13:07:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id` FROM `table`
  2. WHERE (`on` = '1' AND `launched` = '1') OR (`on` != '1' AND `launched` != '1')  
  3. ORDER BY `on`,`launched`
  4. LIMIT $start,$num
 
 Top
Sankaboy
Отправлено: 28 Сентября, 2013 - 13:19:44
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




LIME, выводится не по условию, т.е в разнобой. То что должно быть первым оказалось почти сзади.

Убрал: ORDER BY и его значения и все сработало. Спасибо. +1

(Отредактировано автором: 28 Сентября, 2013 - 13:36:14)

 
 Top
Champion Супермодератор
Отправлено: 28 Сентября, 2013 - 13:45:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




order by (`on` = '1' AND `launched` = '1') desc, (`on` != '1' AND `launched` != '1') desc.

Убрал order by и добился этим нужного порядка вывода и не озадачился - это прям не знаю. Прям мировоззрение мне перевернул.
Без order by порядок вывода будет меняться при одинаковых данных в зависимости от того, на какой платформе запускается запрос, от того, в каком порядке вставлялись данные и даже от текущей нагрузки на систему.
(Добавление)
или order by (`on` xor `launched`) asc
 
 Top
LIME
Отправлено: 28 Сентября, 2013 - 13:59:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




или
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id` FROM `table`
  2. WHERE `on` = '1' AND `launched` = '1'
  3. UNION
  4. SELECT `id` FROM `table`
  5. WHERE `on` != '1' AND `launched` != '1'
  6. LIMIT $start,$num

(Добавление)
это если `on` != '1' может быть и больше и меньше 1
хотя если так то надо было лучше проектировать
 
 Top
Sankaboy
Отправлено: 28 Сентября, 2013 - 14:17:42
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Champion пишет:
order by (`on` = '1' AND `launched` = '1') desc, (`on` != '1' AND `launched` != '1') desc.

Убрал order by и добился этим нужного порядка вывода и не озадачился - это прям не знаю. Прям мировоззрение мне перевернул.
Без order by порядок вывода будет меняться при одинаковых данных в зависимости от того, на какой платформе запускается запрос, от того, в каком порядке вставлялись данные и даже от текущей нагрузки на систему.
(Добавление)
или order by (`on` xor `launched`) asc


Ахах, я конечно дописал ORDER BY с условием вывода - DESC. Чтобы строки выводились по первому условию в первых страницах. Спасибо за помощь.
 
 Top
Sankaboy
Отправлено: 29 Сентября, 2013 - 22:30:44
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Доброй ночи!
Спасибо за ответы ранее!
Теперь нужно построить не много другой запрос.
Запрос ниже нужно модифицировать:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM `table` WHERE (`on` = '1' AND `launched` = '1' ) OR ( `on` = '1' AND `launched` = '0') ORDER BY `launched` DESC
  3.  


Только теперь нужно вставить вот эту часть: `id` = '".$row."' (*или похожую по смыслу)

Т.е. выводиться должны только те строки, которые будут входить через `id` = '".$row."'. Но при условии, что в первую очередь выведутся по условию (`on` = '1' AND `launched` = '1' ), а потом ( `on` = '1' AND `launched` = '0').
За ранее спасибо!
 
 Top
LIME
Отправлено: 30 Сентября, 2013 - 22:46:40
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE `id` = $row AND `on`= '1' ORDER BY `launched` DESC
если launched бывает только 0 и 1

(Отредактировано автором: 01 Октября, 2013 - 08:48:17)

 
 Top
Sankaboy
Отправлено: 01 Октября, 2013 - 19:11:01
Post Id



Гость


Покинул форум
Сообщений всего: 96
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




У меня launched только 0 или 1. Кажется работает запрос, исправляю раннее допущенные мной ошибки. Спасибо! Пивко
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB