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 :: Версия для печати :: Условия в запросе mySql
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Условия в запросе mySql

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

1. Sankaboy - 28 Сентября, 2013 - 12:49:12 - перейти к сообщению
Здравствуйте! Есть такая задача:
Существует запрос:
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? За раннее спасибо!
2. LIME - 28 Сентября, 2013 - 13:07:00 - перейти к сообщению
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
3. Sankaboy - 28 Сентября, 2013 - 13:19:44 - перейти к сообщению
LIME, выводится не по условию, т.е в разнобой. То что должно быть первым оказалось почти сзади.

Убрал: ORDER BY и его значения и все сработало. Спасибо. +1
4. Champion - 28 Сентября, 2013 - 13:45:16 - перейти к сообщению
order by (`on` = '1' AND `launched` = '1') desc, (`on` != '1' AND `launched` != '1') desc.

Убрал order by и добился этим нужного порядка вывода и не озадачился - это прям не знаю. Прям мировоззрение мне перевернул.
Без order by порядок вывода будет меняться при одинаковых данных в зависимости от того, на какой платформе запускается запрос, от того, в каком порядке вставлялись данные и даже от текущей нагрузки на систему.
(Добавление)
или order by (`on` xor `launched`) asc
5. LIME - 28 Сентября, 2013 - 13:59:40 - перейти к сообщению
или
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
хотя если так то надо было лучше проектировать
6. Sankaboy - 28 Сентября, 2013 - 14:17:42 - перейти к сообщению
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. Чтобы строки выводились по первому условию в первых страницах. Спасибо за помощь.
7. Sankaboy - 29 Сентября, 2013 - 22:30:44 - перейти к сообщению
Доброй ночи!
Спасибо за ответы ранее!
Теперь нужно построить не много другой запрос.
Запрос ниже нужно модифицировать:
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').
За ранее спасибо!
8. LIME - 30 Сентября, 2013 - 22:46:40 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE `id` = $row AND `on`= '1' ORDER BY `launched` DESC
если launched бывает только 0 и 1
9. Sankaboy - 01 Октября, 2013 - 19:11:01 - перейти к сообщению
У меня launched только 0 или 1. Кажется работает запрос, исправляю раннее допущенные мной ошибки. Спасибо! Пивко

 

Powered by ExBB FM 1.0 RC1