【问题标题】:how can i stop duplicate values from being shown?如何阻止显示重复值?
【发布时间】:2014-06-26 19:12:48
【问题描述】:

好的,所以我已经尝试了 2 天,但没有真正成功

这是我的代码

$splash_list = '';

$splash_array = array();

$sql = "SELECT * FROM pm WHERE receiver='$username' OR sender='$username'";
$query = mysqli_query($db, $sql);
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
        if($username == $row['sender']){
                $otuser = array_push($splash_array, $row['receiver']);
                $this_user = $row['sender'];
        } else {
                $otuser = array_push($splash_array, $row['sender']);
                $this_user = $row['receiver'];
        }

 }
foreach($splash_array as $otuser){
        $splash_list .= '<div>'.$otuser.'<br></div>';
}      

输出是 otuser1 otuser1 otuser1 otuser2 otuser2

如果有人能给我指点一下我会怎么做 像这样只输出每个值一次 otuser1 otuser2

不胜感激:)

【问题讨论】:

标签: php mysql


【解决方案1】:

你可以这样做SELECT DISTINCT ... (DISTINCT optimization docs)

但是您的代码还有其他一些严重问题...

  1. SELECT *evil
  2. mysql_* 函数是 deprecated
  3. 您的代码易受SQL injections 的攻击

查看使用 PHP 的 PDO 以获得更多帮助。

您生成的代码将类似于

$query = $db->prepare("
  SELECT DISTINCT sender, receiver
  FROM pm
  WHERE receiver = :username
     or sender   = :username
");

$result = $query->execute(array("username" => $username));

注意文档建议您应该使用这样的冒号 → ":username" =&gt; $username。关于 PDO 参数绑定的一个鲜为人知的好处是 : 是可选的。有皮!

【讨论】:

  • 不应该是(":username" =&gt; $username),因为您使用占位符WHERE receiver = :username 根据手册链接php.net/manual/en/pdostatement.execute.php
  • ^--« 根据您包含的手册链接的示例 #2 php.net/manual/en/pdostatement.execute.php
  • @Fred-ii-,不。 : 是可选的。非常棒,对吧?
  • 差不多!如果它是可选的,那就太好了。我没有在他们的文档中找到它(),但我会相信你的话;-)
  • @Fred-ii- 无论如何都感谢您提出来。我在帖子底部为有类似问题的人添加了通知
【解决方案2】:

我认为DISTINCT 不适合这个。因为DISTINCT 将返回发送者和接收者的唯一组合,所以 ('otuser1', 'otuser2') 和 ('otuser2', 'otuser1') 会有所不同。

最简单的解决方案:

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

http://de2.php.net/manual/en/function.array-unique.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多