вложенный SQL-запрос select database

#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 !=’Ответил’ хехе..