Php sql将单个条目与多个条目之和表连接起来

Php sql将单个条目与多个条目之和表连接起来,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我有一个表存储一个条目post,另一个表存储喜欢post的用户的多个条目。用户id和喜欢帖子的日期。(喜欢发帖) 如何编写一个查询,从post表中选择每个post,并将posts.id=postlikes.post_id的postlikes表中的条目数计算为sum 最好用SQL和类似的laravel语言回答。任何人都可以。谢谢你试试这个 $query="SELECT tbl1.col1, tbl1.col2, tbl2.col1, tbl2.col2 from POSTS as tbl1 inn

我有一个表存储一个条目post,另一个表存储喜欢post的用户的多个条目。用户id和喜欢帖子的日期。(喜欢发帖)

如何编写一个查询,从post表中选择每个post,并将posts.id=postlikes.post_id的postlikes表中的条目数计算为sum

最好用SQL和类似的laravel语言回答。任何人都可以。谢谢你试试这个

$query="SELECT tbl1.col1, tbl1.col2, tbl2.col1, tbl2.col2 from POSTS as tbl1 inner join POSTLIKES as tbl2 on tbl1.post_id=tbl2.post_id";
使用:

通过邮政id。
聚合函数(如Count())将在每个组上工作,即每个组将返回一条记录。
您还可以查看组鉴别器(本例中为post id)。MySQL在规则上有点松懈,所以您也可以从“posts”表中选择任何字段——但除非您真的必须……不要;-)

:


(正如所料:每个人都喜欢post#1,没有人喜欢post#4)

您能为您的表提供一个定义吗?如果没有这些,答案只能给出最一般的实现。另外,你的laravel模型是什么样子的,到目前为止你做了哪些尝试,你在坚持什么?
Select COUNT(postlikes.id), postlikes.post_id, posts.name as post_name from postlikes inner join postlikes on posts.id = postlikes.post_id group by postlikes.post_id
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');  
//echo 'client version: ', $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), "\n";
//echo 'server version: ', $pdo->getAttribute(PDO::ATTR_SERVER_VERSION), "\n";
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);


$result = $pdo->query('
    SELECT
        p.id, Count(l.user_id) as lc
    FROM
        soPosts as p
    LEFT JOIN
        soLikes as l
    ON
        l.post_id=p.id
    GROUP BY
        p.id
', PDO::FETCH_ASSOC);

foreach($result as $row ) {
    echo join(', ', $row), "\r\n";
}



function setup($pdo) {
    $queries = array(
        '
            CREATE TEMPORARY TABLE soPosts (
                id INT auto_increment,
                title varchar(32),
                message varchar(32),
                primary key(id)
            )
        ',
        '
            CREATE TEMPORARY TABLE soLikes (
                post_id INT,
                user_id INT,
                primary key(post_id,user_id)
            )
        ',
        "INSERT INTO soPosts (title,message) VALUES
            ('PostA', 'messageA'),('PostB', 'messageB'),('PostC', 'messageC'),('PostD', 'messageD')
        ",
        'INSERT INTO soLikes (post_id,user_id) VALUES
            (1, 1),(1, 2),(1, 3),(1, 4),(1, 5),
            (2, 4),(2, 5),
            (3, 1)
        ',
    );
    foreach( $queries as $q ) {
        $pdo->exec($q);
    }
}
1, 5
2, 2
3, 1
4, 0