PHP.SU

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

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

> Найдено сообщений: 5
oleg000_som Отправлено: 30 Июня, 2011 - 18:23:47 • Тема: MySQL - Ограничение выборки количества записей при объединении • Форум: Работа с СУБД

Ответов: 2
Просмотров: 3247
Дельный совет!
Я просто облажался в коде.
Запрос на выборку кол-во записей шел не в ту таблицу и в результате мой описанный запрос выше просил вывести LIMIT -3, 3 записей.
oleg000_som Отправлено: 30 Июня, 2011 - 02:28:25 • Тема: MySQL - Ограничение выборки количества записей при объединении • Форум: Работа с СУБД

Ответов: 2
Просмотров: 3247
Существуют 2 таблицы: таблица с сообщениями (message) и таблица с данными пользователей (users).
Вот код запроса, который выбирает сообщения с message и аватарку с users:
PHP:
скопировать код в буфер обмена
  1. $query = sprintf ('SELECT  m.id, m.sender, m.theme, m.text_mes, m.date, m.fno, u.avatar FROM message m INNER JOIN users u ON m.sender=u.username WHERE m.receiver="%s" AND m.fr="%s" ORDER BY m.date DESC ',$user,"1");
  2. $result = mysql_query($query);


fr - flag receiver, флаг который отвечает за показ сообщения на странице получателя 1-показывать, 0 - нет

И какая собственно проблема: нужно сделать выборку на ограниченное количество записей для постраничной навигации... вот только оказалось, что вот так запрос не катит:
PHP:
скопировать код в буфер обмена
  1. $query = sprintf ('SELECT  m.id, m.sender, m.theme, m.text_mes, m.date, m.fno, u.avatar FROM message m INNER JOIN users u ON m.sender=u.username WHERE m.receiver="%s" AND m.fr="%s" ORDER BY m.date DESC LIMIT %s, %s', $user, "1", $start, $num);
  2. $result = mysql_query($query);


Подскажет кто-то как быть в такой ситуации?
oleg000_som Отправлено: 22 Июня, 2011 - 05:57:54 • Тема: Помогите составить mysql запрос на выборку 5 элементов у которых в другой таблице наибольшее число повторений • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 47
я тут решил сесть и добить этот вопрос...
расписал все по полочкам... получилось много лишнего кода, но ... в общем сами смотрите:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $qq1 = mysql_query("SELECT post FROM comments WHERE `v_a`='1'"); /*Выбираем все комментарии для музыки (`v_a`='1') */
  3.         $aa1 = mysql_fetch_array($qq1);
  4.         do {
  5.            $ar[] = $aa1['post'];/*помещаем все результаты в массив*/       
  6.         }
  7.         while ($aa1 = mysql_fetch_array($qq1));
  8.         print "<br>";
  9.         $ar = array_unique($ar);/*очищаем от повторяющихся результатов*/
  10.        
  11.         for ($i=0;$i<count($ar);$i++){
  12.            $qq2 = sprintf('SELECT count(post) FROM comments WHERE `post`="%s" AND `v_a`=1',$ar[$i]);/*считаем кол-во записей по каждому посту*/
  13.            $rr2 = mysql_query($qq2);
  14.            $aa2 = mysql_fetch_array($rr2);
  15.            $ar2[] = $aa2['0'];/*помещаем все результаты в массив*/
  16.            print_r ($aa2['0']." ");
  17.         }
  18.         print "<br>";
  19.         $arr = array_combine($ar,$ar2);
  20.         print_r($arr);echo"<br>";
  21.         /*помещаем 2 полученных массива в 1. ключи которого будут номерами постов, а значения - кол-вом комментариев*/
  22.         natsort($arr); /*сортируем по возрастанию*/print_r($arr);echo"<br>";
  23.         arsort($arr); /*и в обратном порядке*/print_r($arr);echo"<br>";
  24.    
  25.         /*получаем пятерку победителей по количеству комментариев*/
  26.         $list[] = key($arr);
  27.         next($arr);
  28.         $list[] = key($arr);
  29.         next($arr);
  30.         $list[] = key($arr);
  31.         next($arr);
  32.         $list[] = key($arr);
  33.         next($arr);
  34.         $list[] = key($arr);
  35.        
  36.         print_r($list);echo"<br>";
  37.         /*выбираем и печатаем в цыкле нужные элементы*/
  38.         print "<p>";
  39.         for ($k=0; $k<count($list); $k++){
  40.            $qq3 = sprintf('SELECT `id`,`group`,`img_src` FROM music WHERE `id`="%s"' ,$list[$k]);
  41.            $rr3 = mysql_query($qq3);
  42.            $aa3 = mysql_fetch_array($rr3);
  43.            printf ("<a href='view_music.php?music_id=%s'><img src='%s' alt='%s' width='110'/></a> ",$aa3['id'],$aa3['img_src'],$aa3['group']);
  44.         }
  45.         print "</p>";
  46.  


Вот только count в mysql запросе ведет себя странно:одни нормально считает, а другие не правильно... на посте номер 8 вместо положенных 4х считает, что их 2... а на втором, что их 4 когда их 1 (учитывая поля, где v_a='1')...
oleg000_som Отправлено: 21 Июня, 2011 - 23:09:41 • Тема: Помогите составить mysql запрос на выборку 5 элементов у которых в другой таблице наибольшее число повторений • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 47
Существуют 2 таблицы: comments и groups
comments - таблица с комментариями к описанию группы
groups - таблица с информацией о группах
comments содержит поля: id, post, author, text_com и т. д.
groups содержит : id, img_src, title и т. д.

При добавлении комментария в поле post таблицы comments заносится идентификатор группы из groups.

Теперь мне нужно сделать следующее: выбрать поля id, img_src, title из таблицы groups тех пяти групп, у которых наибольшее количество комментариев в comments. Короче говоря, выбрать 5 наиболее популярных в обсуждении групп.
oleg000_som Отправлено: 21 Июня, 2011 - 03:08:32 • Тема: механизм получения уникальных полей • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 18
Вот допустим у меня есть таблица с некоторыми данными, к примеру данные о музыкальных альбомах. Там есть поля id, group, album, year, cat и так далее... поле cat (varchar) может содержать как одно слово, так и несколько через пробел... ("metal" или "metalcore deathcore" или "metalcore post-hardcore")... и мне нужно выбрать только уникальные значения ("metalcore","deathcore","metal","post-hardcore"), чтобы сформировать список категорий по жанрам... я так полагаю придется делать запрос к бд на уникальные значения, помещать все в 1 строку добавляя пробелы, експлодить по пробелам и перегонять в массив только уникальные значения...
И вот сам вопрос: если этих альбомов будут сотни, а то и тысячи, то mysql запрос SELECT DISTINCT cat FROM music будет ресурсоемким или он пользует мало ресурсов не зависимо от количества элементов в таблице? Если ресурсоемким, то какие еще варианты предложите по реализации вывода категорий?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB