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]   

> Описание: Аля модуль "похожие посты" из текущей категории.
isle
Отправлено: 24 Июня, 2010 - 10:01:32
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




Всем привет. Пробую освоить сложные запросы в БД, но никак пока не выходит. Столкнулся с такой задачей: имею id поста, нужно узнать его id категории и из этой категории вытащить остальные посты. Модуль аля "похожие посты". Из простых нескольких запросов сделал - работает, но как несколько запросов объединить для выборки - не пойму, хотя много примеров перекопал и перепробовал разные варианты, может, кто знает?

CODE (htmlphp):
скопировать код в буфер обмена
  1.   $sql = "
  2.         SELECT id, category, autor, date, short_story, title, descr, alt_name
  3.         FROM dle_post p
  4.         WHERE p.category='$category' && p.approve='1' && p.short_story!='' && p.title!=''
  5.         GROUP BY p.id
  6.         ORDER BY p.id ASC
  7.         LIMIT 0,10";
  8.   $res = $db->query($sql);
  9.   while($r = $db->get_row($res)) echo $r['id'].'/';


Если вместо p.category='$category' вписать конкретную категорию, то работает, иначе - никак.

(Отредактировано автором: 24 Июня, 2010 - 10:05:17)

 
 Top
SAD
Отправлено: 24 Июня, 2010 - 10:15:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




А это за ересь - && ? Надо использовать AND, вместо &&
 
 Top
isle
Отправлено: 24 Июня, 2010 - 10:27:30
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




SAD пишет:
А это за ересь - && ? Надо использовать AND, вместо &&


Какая разница? - работает же! Есть что по делу сказать?
 
 Top
duk
Отправлено: 24 Июня, 2010 - 11:08:50
Post Id



Частый гость


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


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




что-нибудь типа

PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "SELECT id, category, autor, date, short_story, title, descr, alt_name
  3.        FROM dle_post p
  4.        WHERE p.category in (select category from dle_post where id='$currentid') && p.approve='1' && p.short_story!='' && p.title!=''
  5.        GROUP BY p.id
  6.        ORDER BY p.id ASC
  7.        LIMIT 0,10"
  8.  
 
 Top
isle
Отправлено: 24 Июня, 2010 - 11:26:35
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Окт. 2009  
Откуда: Казахстан, Алматы


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




duk, спасибо, здорово, так работает. Сейчас нашел в сети интересные картинки запросов:

_http://codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.htmlhttp://forum.php.su/topic.php?forum=1&topic=4267

и группировки:

_http://sql-ex.ru/help/select4.php

Вроде как начинаю понимать, но пока еще сложновато для меня, только там примеры с джоинтами. Сейчас про джоинты и группировку мануал как раз копаю.

Теперь такой вопрос возник: на сколько приведенный пример оптимизирован? - нужно для сайта с большой посещалкой.
 
 Top
duk
Отправлено: 24 Июня, 2010 - 12:15:04
Post Id



Частый гость


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


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




isle пишет:

Теперь такой вопрос возник: на сколько приведенный пример оптимизирован? - нужно для сайта с большой посещалкой.


Насколько я помню, когда пишешь селект, то в where первым должно идти самое строгое условие, то есть то, которое отсеет максимальное количество лишних записей. Следом за ним - чуть менее строгое и так далее.
То есть тут все зависит от содержания таблицы dle_post и смысла полей approve, short_story, title
 
 Top
qbik
Отправлено: 24 Июня, 2010 - 13:37:54
Post Id


Гость


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


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




isle пишет:
на сколько приведенный пример оптимизирован? - нужно для сайта с большой посещалкой.

$sql = "explain ".$твойзапрос очень помогает
конечно желательно чтоб база была побольше и поразличнее, полезно rnd накидать
ну и индексов набрать по смыслу

зы как минимум, у каждого проверяемого параметра в where желательно, чтоб был индекс

(Отредактировано автором: 24 Июня, 2010 - 13:41:20)

 
 Top
JustUserR
Отправлено: 24 Июня, 2010 - 15:31:42
Post Id



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


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


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




isle пишет:
Если вместо p.category='$category' вписать конкретную категорию, то работает, иначе - никак
Можете к примеру использовать вложенный SQL-запрос - а именно во вложенном запросе вы выбираете все категории к которым принадлежит ваша статья - и во внешнем запросе выбираете все статьи категории которых находятся среди списка выбранных - это можно реализовать оператором IN


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB