php - 包含 3 个表格,类似于 like 或 +1 的做法

标签 php mysql

我有2张 table

页面

page_id   post_id   pid  
 3421      2345      1357 
 3421      4567      2468
 3421      7891      1357

用户

 pid      fname    lname 
 1357     john     bravo
 2468     ray      mexy

使用以下语句

$result = mysql_query("SELECT usrs.*,pages.* FROM usrs INNER JOIN pages ON 

 usrs.pid = pages.pid WHERE pages.page_id = '$pageid'"); // $pageid = 3421

它以数组的形式给出了 page_id = 3421 的所有匹配项。

这样的东西会回显结果

     while($row = mysql_fetch_array($result))
        echo $row['post_id'] . " " . $row['fname'] . " " . $row['lname'];

o/p is   2345 john bravo 
         4567 ray  mexy
         7891 john bravo

现在真正的问题是,在这种情况下我还有另一个表可以处理

考虑表 3:total_likes

   post_id   pid
    2345     3214
    2345     4123
    1245     4567
    2345     2367

用户可以选择喜欢它,当用户点击喜欢按钮时,他的pid会与post_id一起添加,现在我想要特定 post_id 的点赞数,即特定 post_id 的行数。

我希望输出是这样的

         2345 john bravo     45 likes
         4567 ray  mexy      32 likes
         1357 john bravo     20 likes 

我不确定它是否可能,因为第三个表包含更多的 post_id 值。它就像一个指向数组 $row['post_id'] 的值的数组。

最佳答案

您可以有一个额外的子查询,单独计算每个 post_id 的记录数。

SELECT  a.*, 
        b.*
        c.likes, c.IsExist
FROM    pages a
        INNER JOIN usrs b
            ON a.pid = b.pid
        LEFT JOIN
        (
            SELECT  post_id, 
                    COUNT(*) likes,
                    IF(SUM(pid = 1357) > 0, 'yes', 'no') IsExist
            FROM    total_likes
            GROUP   BY post_id
        ) c ON b.post_id = c.post_id
WHERE   a.page_id = 3421

关于php - 包含 3 个表格,类似于 like 或 +1 的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764867/

相关文章:

mysql - 使用连接更新表的多行列

PHP - 将 MySQL 查询导出到 CSV

php - 使用 PHP 查询 mysql,放置空字段,并将数据导出为 CSV

php - 如何为 get_meta_tags() 和 get_headers() 设置超时

php - 遍历获取的 SQL 数据

php - MacOS Laravel Valet 增加 memory_limit

PHP 命名空间和继承

mysql - 在 MySQL 中确定给定数字的因子数而不重叠

MySQL查询变慢

mysql - 如果我从不调用连接池(BoneCP)中的 shutdown() 方法,会有什么不方便吗?