С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94

Сортировка при выборке из одной таблицы по значениям другой

12.11.2011, 03:02. Показов 6325. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ситуация следующая:
Имеем 2 таблицы в БД
1 таблица - храним новости
2 таблица - храним комментарии к новостям

Имеем примерно такую структуру таблиц:
news
idtitle
1Новость 1
2Новость 2
3Новость 3
4Новость 4

comments
idtitlenews_id
1Комментарий 13
2Комментарий 22
3Комментарий 33
4Комментарий 41
5Комментарий 52
6Комментарий 62

Комментарии к новостям определяются по значению news_id, т.е. где имеем совпадение news_id из таблицы comments и id из таблицы news означает что комментарий принадлежит нужной новости.

Значит по нашим данным мы имеем:
1 новость = 1 комментарий
2 новость = 3 комментария
3 новость = 2 комментария
4 новость = 0 комментарев

Суть вопроса! Нужно провести выборку из обоих таблиц, при этом нужно отсортировать новости по количеству комментариев к ним и вдобавок указать у каждой новости количество этих самых комментариев. Т.е. после выборки новости должны выводиться на сайте в следующем порядке и виде:
2 новость (3 ком.)
3 новость (2 ком.)
1 новость (1 ком.)
4 новость (0 ком.)

Помогите товарищи разобраться, сам никак додуматься не смог)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2011, 03:02
Ответы с готовыми решениями:

Сортировка при выборке из одной таблицы по значениям другой
Ситуация следующая: Имею 2 таблицы в БД 1 таблица - имеет имя "tblDoctor" храню информацию о врачах, в ней строки DoctorID...

Выбрать значение одной таблицы и показать в цикле вывода другой таблицы при совпадении значений
Добрый день, не могу понять корень проблемы: Есть две таблицы: "catalog" и "category" (скрины прикрепляю к посту) Из таблицы...

join таблицы к выборке из другой таблицы firebird 1.5
select * from table1 inner join (select distinct field0, field1, field2, SUM(field3) from table2 group by field0, field1, field2) ...

8
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
12.11.2011, 13:27
Как в php будет выглядеть не в курсе, но вот на SQL выглядит так

SQL
1
2
3
4
SELECT title AS "news", com=COUNT(*)
FROM comments c, news n
WHERE c.id_news=n.id
GROUP BY id_news, title
Картинка во вложении, где и какие поля)..
Миниатюры
Сортировка при выборке из одной таблицы по значениям другой  
1
26 / 23 / 9
Регистрация: 12.08.2011
Сообщений: 576
12.11.2011, 13:28
Цитата Сообщение от TARAKANhoy Посмотреть сообщение
Нужно провести выборку из обоих таблиц
это можно сделать так
PHP
1
2
3
4
5
6
7
8
$query = "SELECT t1.id,
                     t1.title,
 
                     t2.title AS title_comment
                   FROM news a
                     LEFT JOIN comments t2
                     ON t1.id = t2.news_id
                   WHERE t1.id=".$_GET['id']."";
1
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94
14.11.2011, 00:15  [ТС]
Почему то оба варианта ничего в итоге не выдают...Если не сложно прокомментируйте строки кода, где что и для чего делается, может мне просто нужно правильно адаптировать её под свою таблицу
0
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
14.11.2011, 00:24
T-SQL
1
2
3
4
SELECT title AS "news", com=count(*) //производим выбор из поля "title" и в новой таблице у нас будет поле с названием "news" и считаем сумму всех комментариев функцией count(*)
FROM comments c, news n //выбираем записи из таблиц comments и news, с и n - псевдонимы для связей, чтобы не писать полное название таблицы
WHERE c.id_news=n.id //связываем обе таблицы по ключу, который у таблиц одинаковый.
GROUP BY id_news, title //группируем все записи по полям "id_news" и "title"
Мой код идеально работает для SQL, под PHP нужна адаптация)
1
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94
14.11.2011, 01:52  [ТС]
Попробовал задать в PHPmyAdmin SQL запрос такого вида:
SQL
1
2
3
4
SELECT title AS "news_com_sort", com=COUNT(*)
FROM comments_news c, news n
WHERE c.id_news=n.id
GROUP BY id_news, title
Выдал ошибку #1054 - Unknown column 'com' in 'field list'
0
 Аватар для KaRaNTiN
44 / 44 / 11
Регистрация: 10.06.2009
Сообщений: 311
Записей в блоге: 2
14.11.2011, 12:32
Цитата Сообщение от TARAKANhoy Посмотреть сообщение
Попробовал задать в PHPmyAdmin SQL запрос такого вида:
SQL
1
2
3
4
SELECT title AS "news_com_sort", com=COUNT(*)
FROM comments_news c, news n
WHERE c.id_news=n.id
GROUP BY id_news, title
Выдал ошибку #1054 - Unknown column 'com' in 'field list'
Попытайтесь взять в двойные кавычки название поля com, т.е. "com". Возможно из-за этого и не работает).
1
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
14.11.2011, 16:07
Цитата Сообщение от TARAKANhoy Посмотреть сообщение
com=count(*)
Цитата Сообщение от TARAKANhoy Посмотреть сообщение
Выдал ошибку #1054 - Unknown column 'com' in 'field list'
надо приравнивать через AS.
и у тя никак не определены поля, т.е., не связаны с таблицами. Напр., title к какой таблице принадлежит, comments_news или news? Связать таблицу с полем можно через точку, напр., c.title
...
Я в коде напишу перед title букву c, это будет означать, что я связываю это поле с таблицей comments_news, если это так, то AS news_com_sort можно не писать, потому что мы выборку в основном делаем из таблицы comments_news (обрати внимание - FROM comments_news).
Если все таки, поле title принадлежит таблице news , то перед title поставь букву n и оставь AS news_com_sort
...
SQL
1
2
3
4
5
6
SELECT c.title, COUNT(*) AS com 
FROM comments_news c  
LEFT JOIN news n 
ON c.id_news = n.id 
GROUP BY c.id_news, c.title 
ORDER BY com DESC
если не поможет попробуй
SQL
1
ORDER BY MAX(com) DESC
1
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94
14.11.2011, 21:16  [ТС]
Спасибо всем кто помог! У меня всё получилось, тут я ещё ступил немного, у меня оказывается строка называлась не id_news а news_id беее) А в comment_news вообще не было title. В общем итоге код получился следующий:
SQL
1
2
3
4
5
SELECT n.title, COUNT(*) AS  "com"
FROM comments_news c
LEFT JOIN news n ON c.news_id = n.id
GROUP BY c.news_id, n.title
ORDER BY com DESC
В PHP так:
PHP
1
2
3
4
5
6
7
8
$result_comcont = mysql_query ("SELECT n.title, COUNT(*) AS  \"com\"
                                FROM comments_news c
                                LEFT JOIN news n ON c.news_id = n.id
                                GROUP BY c.news_id, n.title
                                ORDER BY com DESC ", $db);
$myrow_comcont = mysql_fetch_array($result_comcont);
echo $myrow_comcont['title'];
echo $myrow_comcont['com'];
Ещё раз спасибо всем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2011, 21:16
Помогаю со студенческими работами здесь

Запрос на обновление одной таблицы при изменении другой
Уважаемые, доброго времени суток. Имеется субд парадокс и 3 таблицы: накладная, товары в накладной и товары на складе. Нужно чтобы при...

Подбор по значениям столбца другой таблицы
Добрый день форумчане. На работе дали задание, а я честно говоря не очень хорошо знаю данную область. Ситуация в следующем. Есть книга...

Множественный отбор из колонок одной таблицы по нескольким значениям
Добрый день. Как сделать: есть таблица tab1 kol1 | kol2 | kol3 1 | 1 | 3 1 | 2 | 3 1 | ...

Сравнить строку из одной таблицы со строками другой, удалить ее из обеих таблиц при обнаружении совпадения
Здравствуйте, выгружаю отчёт, макросом разделяю его на 2 листа( 2-е таблицы). нужно проверить продукцию из одной, на повторение её в...

Использование двух записей одной таблицы в одной записи другой
Всем привет! Есть таблица "Application", в ней есть 2 поля, которые содержат: ID пользователя, который запись создал и ID...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru