DISTINCT - 再次下载内容

时间:2014-03-31 19:15:11

标签: php mysql sql

这就是我应该如何使用distinct来再次下载内容。

enter image description here

这里的图片VISR下载内容3次,但我只想要它总共1次

问题在于它没有选择所有这些问题,但我只希望它只选择一个时间,这意味着它只需要按标题下载一次并同时下载用户名。

    $sql = "SELECT DISTINCT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.title FROM fms_bruger INNER JOIN fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id WHERE fms_opslagpm.til_id = ? ORDER BY fms_opslagpm.datotid DESC";
if ($stmt = $this->mysqli->prepare($sql)) { 
    $stmt->bind_param('i', $id);
    $id = $_SESSION["id"];
    $stmt->execute();
    $stmt->bind_result($fornavn, $efternavn, $id, $title);
    while ($stmt->fetch()) {
    ?>
    <tr class="postbox">
        <td class="beskedinfo">
            <p><?php echo $fornavn . " " . $efternavn;?></p>
        </td>
        <td>
            <a href="#"><?php echo $title;?></a>
        </td>
        <td>
            <a href="#">Slet</a>
        </td>
    </tr>
    <?php
    }
    $stmt->close();
}

2 个答案:

答案 0 :(得分:1)

您需要使用GROUP BY而不是DISTINCT来获取标题字段的分组。

SELECT fms_bruger.fornavn, fms_bruger.efternavn, fms_opslagpm.id, fms_opslagpm.title 
FROM fms_bruger 
INNER JOIN fms_opslagpm ON fms_bruger.id=fms_opslagpm.fra_id 
WHERE fms_opslagpm.til_id = ? 
GROUP BY fms_opslagpm.title 
ORDER BY fms_opslagpm.datotid DESC

答案 1 :(得分:0)

SELECT DISTINCT完全按照其说法执行:它选择不同的行。

您在列中包含id。我非常确定ID是唯一的,因此所有行都是DISTINCT

考虑删除DISTINCT关键字并添加GROUP BY `fms_bruger`.`title`子句。这是SQL标准的扩展,它将为每个唯一标题返回一个任意行。