打印id一次PHP PDO

时间:2016-05-28 03:48:59

标签: php mysql pdo

我有这个代码php / pdo,它工作正常

$id = (int)$_GET['id'];
$place = $DB_con->prepare("SELECT * FROM `post` WHERE `category`=".$id."");
$place->execute();

foreach ($place->fetchAll() as $rawp){
   $mains = $DB_con->prepare("SELECT * FROM `place` WHERE `id`=".$rawp['placeid']."");
   $mains->execute();

   foreach ($mains->fetchAll() as $rawps){
      echo $rawps['id'].'<br/>';
   }
}

和该代码的结果一样

113
114
125
122
122
127
127

我的问题是:如何只打印一次地方ID?我不希望重复ID 122

3 个答案:

答案 0 :(得分:3)

SQL可以使用DISTINCT为您执行此操作,如果JOIN这两个表,您只需要一个SQL语句,而您甚至不需要SELECT *所有列但只有你想要的那些:

$places = $DB_con->prepare("SELECT DISTINCT `place`.`id`
             FROM `post` JOIN `place` ON `post`.`placeid` = `place`.id
             WHERE `post`.`category`=:category");
$places->execute(array('category' => $_GET['id']));
foreach ($places->fetchAll() as $place) {
   echo $place['id'] . '<br />';
}

此解决方案比执行两个语句更高效,后来以编程方式减少数据,最重要的是,使用:category子句中的变量绑定(WHERE)部分,这可以防止SQL注入。您永远不应该通过连接$ _GET,$ _POST或$ _REQUEST中的数据来创建SQL语句字符串。

答案 1 :(得分:0)

创建一个临时数组,遍历现有数组并将唯一值推入其中,然后遍历临时数组以回显每个唯一值:请参阅以下内容,但我换出了db相关内容并添加了数字作为一个数组 - 这现在有效。你只需要交换你的数据库特定变量,它应该是好的。

$rawps= array("113","114","125","122","122","127","127");
$tempArray=[];
foreach ($rawps as $rawp){   
   $item = $rawp;
    if(! in_array($item, $tempArray)){array_push($tempArray,$item);
        }
}
 foreach($tempArray as $arrayItem){echo "$arrayItem  <br/>";}

打印以下内容 113 114 125 122 127

//$tempArray conteins the following: Array ( [0] => 113 [1] => 114 [2] => 125 [3] => 122 [4] => 127 ) 

答案 2 :(得分:0)

这应该有效并且每个唯一编号只打印一次

$id = (int)$_GET['id'];
$place = $DB_con->prepare("SELECT * FROM `post` WHERE `category`=".$id."");
$place->execute(); 
$array = array();
foreach ($place->fetchAll() as $rawp){
$mains = $DB_con->prepare("SELECT * FROM `place` WHERE `id`=".$rawp['placeid']."");
$mains->execute(); 
foreach ($mains->fetchAll() as $rawps){ 
    if(!in_array($rawps['id'], $array)){
        echo $rawps['id'].'<br/>';
    }
    $array[] = $rawps['id'];
  }
}