Php 三个表之间的一个mysql查询
我有三张桌子Php 三个表之间的一个mysql查询,php,mysql,sql,Php,Mysql,Sql,我有三张桌子 1.Users -User_id 2.Books -Book_id -Book_name -User_id 3.Likes -Other_User_id -Book_id 我只知道“Users.user_id”,我想知道图书表中好书表中每本书的书名和好书数 注:用户写书,其他用户喜欢。因此,生成的JSON数组将像。。我输入mysql only user_id=10,它会打印 {User id: 10 , Username: cemsitcan, Book Name: Sample
1.Users
-User_id
2.Books
-Book_id
-Book_name
-User_id
3.Likes
-Other_User_id
-Book_id
我只知道“Users.user_id”,我想知道图书表中好书表中每本书的书名和好书数
注:用户写书,其他用户喜欢。因此,生成的JSON数组将像。。我输入mysql only user_id=10,它会打印
{User id: 10 , Username: cemsitcan, Book Name: Sample, Book liked:120 times.}
{User id: 10 , Username: cemsitcan, Book Name: Sample1, Book liked:10 times.}
{User id: 10 , Username: cemsitcan, Book Name: Sample2, Book liked:123 times.}
对此,您不需要用户表。如果使用此查询:
SELECT *, (
SELECT COUNT(`Other_User_id`)
FROM `Likes`
WHERE `Books`.`Book_id`=`Likes`.`Book_id`
) AS `Likes_Count`
FROM `books`
WHERE `User_id`=10;
小提琴:
以及查询:
SELECT *, (
SELECT COUNT(`User_id`)
FROM `Likes`
WHERE `Books`.`Book_id`=`Likes`.`Book_id`
) AS `Likes_Count`
FROM `books`
WHERE `User_id`=10;
输出:
+---------+------------------------------+---------+-------------+
| BOOK_ID | BOOK_NAME | USER_ID | LIKES_COUNT |
+---------+------------------------------+---------+-------------+
| 2 | Hello World by 10 | 10 | 0 |
| 4 | Its a Small World by 10 | 10 | 0 |
| 5 | StackOverflow is Great by 10 | 10 | 2 |
+---------+------------------------------+---------+-------------+
如果您甚至希望显示结果的作者,您需要:
SELECT COUNT(`User_id`)
FROM `Likes`
WHERE `Books`.`Book_id`=`Likes`.`Book_id`
) AS `Likes_Count`, (
SELECT `User_name`
FROM `Users`
WHERE `Users`.`User_id`=`Books`.`User_id`
) AS `Author`
FROM `Books`
WHERE `User_id`=10;
输出为:
+---------+------------------------------+---------+-------------+---------------+
| BOOK_ID | BOOK_NAME | USER_ID | LIKES_COUNT | AUTHOR |
+---------+------------------------------+---------+-------------+---------------+
| 2 | Hello World by 10 | 10 | 0 | Praveen Kumar |
| 4 | Its a Small World by 10 | 10 | 0 | Praveen Kumar |
| 5 | StackOverflow is Great by 10 | 10 | 2 | Praveen Kumar |
+---------+------------------------------+---------+-------------+---------------+
小提琴:
此外,您的json输出应该只提供命名良好的值,在其中粘贴格式信息,如“times”,更不用说名称中的空格了,这是一个非常糟糕的主意。让任何正在消耗数据的人选择如何呈现数据。问题在于……?你是喜欢用户喜欢的书,还是用户喜欢的书,还是两者都喜欢?鉴于这不是一个特别困难的查询,您自己尝试一下也会带来好处,尤其是根据您所询问的内容,users表是不相关的。请关注json输出,然后我想查看三个表中的书名、作者和类总数,我一开始只有user_id,我把用户id给mysql,它告诉我,他自己的书和类似的书不需要三个表来计算,用户id在所有三个表中。为什么不投票?你知道这个查询吗?第一个用户id在哪里?用户id的书名如何列出?{User id:10,Book Name:Sample,Book liked:120次。}{User id:10,Book liked:Sample1,Book liked:10次。}{User id:10,Book Name:Sample2,Book liked:123次。}我不明白。第一个用户id在books表中,对吗?你知道吗,这会输出以下字段:book\u id、book\u name、user\u id和Likes\u count。所以你有这三个项目。对吧?@user3557580wow这太棒了,所以使用此查询的每一行[]上必须有3个key:value。如果一个用户有3本书;三个json数组,包含userid、bookname和books'like计数。此查询中的每个用户图书都有一行。每一行都是userid、书名和喜欢的数量,这是您要求的。显然这里遗漏了什么,但你没告诉我什么。
+---------+------------------------------+---------+-------------+---------------+
| BOOK_ID | BOOK_NAME | USER_ID | LIKES_COUNT | AUTHOR |
+---------+------------------------------+---------+-------------+---------------+
| 2 | Hello World by 10 | 10 | 0 | Praveen Kumar |
| 4 | Its a Small World by 10 | 10 | 0 | Praveen Kumar |
| 5 | StackOverflow is Great by 10 | 10 | 2 | Praveen Kumar |
+---------+------------------------------+---------+-------------+---------------+
select b.user_id, b.book_name, count(l.book_id) from Books b
inner join likes l on l.book_id = b.book_id
Group by b.user_id, b.book_name
Where b.user_id = ?