我有这段代码 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
这样的重复项。
最佳答案
SQL 可以用 DISTINCT
为您做到这一点,如果您 JOIN
两个表,您只需要一个 SQL 语句,甚至不需要 选择 *
所有列,但只选择您想要的列:
$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 />';
}
此解决方案比执行两个语句然后以编程方式减少数据的性能更高,而且最重要的是,在 WHERE
中使用变量绑定(bind)(:category
)部分子句,它可以防止 SQL 注入(inject)。永远不要通过连接来自 $_GET、$_POST 或 $_REQUEST 的数据来创建 SQL 语句字符串。
关于php - 打印 id 一次 PHP PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37495000/