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 :: Как упростить запрос

 PHP.SU

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


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

> Без описания
dzheka3d
Отправлено: 15 Июля, 2014 - 23:23:03
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июль 2011  


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




Приветствую всех! Есть у меня запрос, суть такова, что он должен вывести мне текущую запись плюс предыдущую и следующую. Все работает, но глядя на код, даже меня, далеко не профи, передергивает. Может подскажете как можно его преобразовать в более правильный и аккуратный?

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. (
  3. SELECT *
  4. FROM  `news` news
  5. INNER JOIN  `category` cat ON cat.`id` = news.`category_id`
  6. WHERE news.`id` <12
  7. ORDER BY news.`id` DESC
  8. LIMIT 1
  9. )
  10. UNION (
  11.  
  12. SELECT *
  13. FROM  `news` news
  14. INNER JOIN  `category` cat ON cat.`id` = news.`category_id`
  15. WHERE news.`id` =12
  16. LIMIT 1
  17. )
  18. UNION (
  19. SELECT *
  20. FROM  `news` news
  21. INNER JOIN  `category` cat ON cat.`id` = news.`category_id`
  22. WHERE news.`id` >12
  23. LIMIT 1
  24. )

(Отредактировано автором: 15 Июля, 2014 - 23:24:19)

 
 Top
OrmaJever
Отправлено: 15 Июля, 2014 - 23:41:04
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




если чисто теоретически предположить что news.id автоинкремент и новости не удаляются, то можно просто написать так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM  news
  3. INNER JOIN  category cat ON cat.id = news.category_id
  4. WHERE news.id IN (12-1, 12, 12+1)
  5. ORDER BY news.id DESC
  6. LIMIT 3


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
dzheka3d
Отправлено: 16 Июля, 2014 - 00:29:29
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июль 2011  


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




автоинкремент, но новости удаляются... такой вариант не пройдет
 
 Top
Sail
Отправлено: 16 Июля, 2014 - 08:59:15
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


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




dzheka3d пишет:
автоинкремент, но новости удаляются...

Тогда нечто подобное:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table`
  2. WHERE `id` BETWEEN
  3.  (SELECT max(`id`) FROM `table` WHERE `id` < 114) AND
  4.  (SELECT min(`id`) FROM `table` WHERE `id` > 114)
  5. ;
  6.  


PS: А вот это вот:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM  `news` news
  3. INNER JOIN  `category` cat ON cat.`id` = news.`category_id`
  4. WHERE news.`id` >12
  5. LIMIT 1

В общем случае, вовсе не обязательно вернёт именно следующую (13-ю) новость...
Может и 14-ю, и 15-ю.... и 225-ю Улыбка

(Отредактировано автором: 16 Июля, 2014 - 09:03:19)

 
 Top
dzheka3d
Отправлено: 16 Июля, 2014 - 18:47:27
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Июль 2011  


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




В принципе все, все, что нужно, спасибо. Но у себя решил выполнить в 3 запроса, т.к. не известно есть ли предыдущая или следующая запись в таблице исходя из этого нужно выводить или не выводить кнопку на перелистывание к следующей или предыдущей
 
 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