Php 仅输出一个结果的联接和计数

Php 仅输出一个结果的联接和计数,php,mysql,Php,Mysql,我想显示来自三个单独表的数据,包括图像/标志上的喜欢计数。当前,结果数组仅打印一个结果。当我删除计数时,它会打印我想要的所有5个 $query = " SELECT image_url, image_path, date, location, fname, lname, rating, COUNT(DISTINCT likes.sign_id) as 'count' FROM signs INNER JOIN

我想显示来自三个单独表的数据,包括图像/标志上的喜欢计数。当前,结果数组仅打印一个结果。当我删除计数时,它会打印我想要的所有5个

$query = " SELECT image_url, image_path, date, location, fname, lname, rating, COUNT(DISTINCT likes.sign_id) as 'count' FROM signs INNER JOIN users ON signs.user_id=users.user_id INNER JOIN likes ON (signs.sign_id=likes.sign_id) WHERE location='Oslo' LIMIT 5"; $result = mysqli_query ( $db_server, $query ) or die ( "Could not find uploads" . mysqli_error ( $db_server ) ); while ( $row = mysqli_fetch_assoc ( $result ) ) { print_r($row);} $query=” 挑选 图像url、图像路径、日期、位置、fname、lname、评级、, 计数(不同的喜欢。签名\u id)为“计数” 从…起 标志 在标志上内部加入用户。用户\u id=用户。用户\u id 打开内部联接likes(signs.sign\u id=likes.sign\u id) 地点=‘奥斯陆’限制5”; $result=mysqli_query($db_server,$query)或die(“找不到上传”。mysqli_错误($db_server)); while($row=mysqli\u fetch\u assoc($result)){ 打印(行);}
我尝试过不同的方法,但问题似乎只与计数有关,它确实计算了正确的喜欢数量。因此,我不知道为什么它不会输出所有结果。

您缺少一个
group by
子句:

    SELECT 
        image_url, image_path, date, location, fname, lname, rating,
        COUNT(DISTINCT likes.sign_id) as 'count'

    FROM 
        signs 
        INNER JOIN users ON signs.user_id=users.user_id
        INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
        WHERE location='Oslo'
        GROUP BY image_url, image_path, date, location, fname, lname, rating
        LIMIT 5;
只有当所有这些列都相同时,这才有效。如果不相同,则需要指定所需的列

如果您的意思是只希望在每行旁边有一个列合计,那么可以使用如下相关查询:

    SELECT 
        image_url, image_path, date, location, fname, lname, rating,
        (SELECT COUNT(DISTINCT l.sign_id) FROM likes l
         WHERE signs.sign_id=l.sign_id) as `count`
    FROM 
        signs 
        INNER JOIN users ON signs.user_id=users.user_id
        INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
        WHERE location='Oslo'
        LIMIT 5;

您缺少一个
分组依据
子句:

    SELECT 
        image_url, image_path, date, location, fname, lname, rating,
        COUNT(DISTINCT likes.sign_id) as 'count'

    FROM 
        signs 
        INNER JOIN users ON signs.user_id=users.user_id
        INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
        WHERE location='Oslo'
        GROUP BY image_url, image_path, date, location, fname, lname, rating
        LIMIT 5;
只有当所有这些列都相同时,这才有效。如果不相同,则需要指定所需的列

如果您的意思是只希望在每行旁边有一个列合计,那么可以使用如下相关查询:

    SELECT 
        image_url, image_path, date, location, fname, lname, rating,
        (SELECT COUNT(DISTINCT l.sign_id) FROM likes l
         WHERE signs.sign_id=l.sign_id) as `count`
    FROM 
        signs 
        INNER JOIN users ON signs.user_id=users.user_id
        INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
        WHERE location='Oslo'
        LIMIT 5;

为什么不在PHP中使用
count()
as执行此操作:为什么不在PHP中使用
count()
as执行此操作:感谢您的快速回复!另一个小问题出现了,我似乎无法查询出没有喜欢的图片。还有一个简单的解决方案吗?@yvindjjartnes将
内部连接
替换为
左连接
,它将返回null而不是零。如果你想要0而不是null,那么在select中加上COALESCE(count(distinct like.sign\u id),0。好的,很好。我花了几个小时试图弄明白这一点:)。大家好,我现在正试图按计数排序结果。这似乎不符合“计数”描述任何想法的顺序?使用反勾号,而不是引号
@感谢您的迅速回复!另一个小问题出现了,我似乎无法查询出没有喜欢的图片。还有一个简单的解决方案吗?@yvindjjartnes将
内部连接
替换为
左连接
,它将返回null而不是零。如果你想要0而不是null,那么在select中加上COALESCE(count(distinct like.sign\u id),0。好的,很好。我花了几个小时试图弄明白这一点:)。大家好,我现在正试图按计数排序结果。这似乎不符合“计数”描述任何想法的顺序?使用反勾号,而不是引号
@Øyvindhjartenes