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 = ?