Php 使用联接表对mysql结果进行分组

Php 使用联接表对mysql结果进行分组,php,mysql,sql,while-loop,Php,Mysql,Sql,While Loop,我正在制作一个包含文章列表的简单表格,另一个用户表格,以及另一个用户喜欢的文章: 文章表: id, userId, title, article, date 用户表 id, name, email, last_login 喜欢表格: id, user_id, article_id, dateLiked 我当前的查询: SELECT articles.id as aid, articles.userId, articles.title, articles.article, likes.u

我正在制作一个包含文章列表的简单表格,另一个用户表格,以及另一个用户喜欢的文章:

文章表:

id, userId, title, article, date
用户表

id, name, email, last_login
喜欢表格:

id, user_id, article_id, dateLiked
我当前的查询:

SELECT 
articles.id as aid, articles.userId, articles.title, articles.article, 
likes.user_id as uLiked, likes.article_id as articleLiked 
FROM articles 
LEFT JOIN likes ON articles.id = likes.article_id
WHERE userId= "10"
因此,我想获取一个用户的所有文章,然后在while循环中,检查登录的用户是否与likes中的该行匹配,如果是,则显示它处于活动状态。如果不是,它仍然显示为不活动。如果他们正在查看其他人的文章,也是一样。他们应该看到所有的文章,但是他们链接的文章应该是活跃的

while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){

    if($row['uLiked'] == 30 && $currentArticleID = $row['articleLiked']){ $status = 'active'; } else { $status = 'inactive';  }

    echo '<div class="'.$status.'">'.$row['title'].'</div>';

}
while($row=mysqli\u fetch\u数组($query,mysqli\u ASSOC)){
如果($row['uLiked']==30&&$currentArticleID=$row['articleLiked']){$status='active';}否则{$status='inactive';}
回显“.$row['title']”;
}
问题是,当文章受到欢迎时,帖子会显示两次,但两次都是活动的。我尝试过分组,但当它分组时,它会像我想要的那样显示文章一次,但没有任何活动


希望我的解释是正确的,但我真的被困在这里了。有什么想法吗,伙计们?我可能走错路了。

如果要使用
groupby
则mysql将所有行分组在一行中,因此mysql只从分组行中选择第一行,其他行将被忽略

所以你必须改变一些逻辑

使用
GROUP\u CONCAT
mysql方法

之后,您将在
uLiked
参数中获得类似
、10,30,15、
userid
)的数据

现在您可以通过字符串的方法检查已识别的登录用户

while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){

    if(strpos($row['uLiked'], ',30,') !== false && $currentArticleID = $row['articleLiked']){ $status = 'active'; } else { $status = 'inactive';  }

    echo '<div class="'.$status.'">'.$row['title'].'</div>';

}
while($row=mysqli\u fetch\u数组($query,mysqli\u ASSOC)){
if(strpos($row['uLiked'],'30',)!==false&&$currentArticleID=$row['articleLiked']){$status='active';}否则{$status='inactive';}
回显“.$row['title']”;
}

编辑您的问题并提供示例数据和所需结果。另外,您编写的查询也不起作用,因为
user\u id
WHERE
子句中是不明确的!!!这正是我想做的。。。我只是在查询中做了
GROUP\u CONCAT(likes.user\id)
if(strpos($row['uLiked',30)!==false){
而这正是我所需要的,谢谢!你必须在开始和结束时加上,(逗号),否则你的条件130也会得到满足,这是错误的。
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){

    if(strpos($row['uLiked'], ',30,') !== false && $currentArticleID = $row['articleLiked']){ $status = 'active'; } else { $status = 'inactive';  }

    echo '<div class="'.$status.'">'.$row['title'].'</div>';

}