#php #sql
#php #sql
Вопрос:
как упорядочить значения, извлеченные из базы данных??
SELECT * FROM comment;
------------------------------------
| commentid | content | read_unread|
------------------------------------
1 hello Unread
2 hi read
Select * From replies;
//commentid Fk from table " comment " so it means row 1 from table comments has 2 replies
------------------------------------
| repnum | rep_content | commentid |
------------------------------------
1 see ya 1
2 ok 1
я хочу показать это в таблице html / php следующим образом
comment num | Content | replies count
--------------------------------------------------
1 hello 2
2 hi 0
// «количество ответов 2» получено из таблицы ответов, на которые был дан ответ на commentid 1 из table comment
как я могу показать это в порядке sql одного запроса по количеству ответов???
Ответ №1:
Попробуйте это :
SELECT a.commentid, a.content, count(b.repnum) as replies_count
FROM comment a left join replies b on a.commentid = b.commentid
GROUP by a.commentid
Комментарии:
1. у меня есть столбец таблицы в ответах с именем Rep_or_Not, я задаю условие count(*) как replie_count» = количество, где Rep_or_not !=’Ответил’
2. у меня есть столбец таблицы в ответах с именем Rep_or_Not, я задаю условие count(*) как replies_count» = количество, где Rep_or_not !=’Ответил’, отображает все значения, включая то, что не имеет ответов
3. я внес изменения в свой синтаксис, и я получаю его, еще раз спасибо за ответы =)
Ответ №2:
Вы можете использовать JOIN
в SQL-запросе :
SELECT c.commentid, c.content, COUNT(r.replies) FROM comment c JOIN replies r ON r.commentid = c.commentID GROUP BY c.commentid, c.content;
Больше информации здесь:http://dev.mysql.com/doc/refman/5.7/en/join.html
Ответ №3:
Объединение слева и подсчет из таблицы ответов — ваши друзья. Внутреннее соединение удалит comments
те, которые еще не получили никаких replies
, поэтому здесь потребуется левое соединение. И count from replies
— это ваше требование, поэтому count (*) не будет работать.
SELECT A.commentid AS comment_num, A.content AS Content, count(B.commentid) as replies_count
FROM comment A
LEFT JOIN replies B on A.commentid=B.commentid
GROUP BY A.commentid, A.content
Ответ №4:
Попробуйте.
SELECT a.commentid, a.content, count(*) as replies_count
FROM comment a
LEFT JOIN replies b on a.commentid=b.commentid
GROUP BY a.commentid, a.content
Комментарии:
1. у меня есть столбец таблицы с именем Rep_or_not в ТАБЛИЦЕ ответов, я хочу отобразить все значения строк, но отобразить, ГДЕ КОЛИЧЕСТВО Rep_or_not !=’Ответил’… Спасибо
2. ваш приведенный выше запрос отображает все строки с их количеством ответов, но есть условие, если Rep_or_not !=’Ответил’, то отобразите ВСЕ, но с количеством Rep_or_not !=’Ответил’ …. я имею в виду » count (*) as replie_count» = количество, где Rep_or_not !=’Ответил’ хехе..