INNERJOIN + SELECT特定列

时间:2016-06-20 14:21:35

标签: php html mysql sql database

我的SQL请求有点问题,我检查过很多关于这个问题的主题,但我没有找到解决方法。

我的表imagesplaquettes同时获得了' domaine'列,但我想只从plaquettes表中选择。这个sql给我一个FetchAll错误。

我不知道为什么这个简单的INNER JOIN不起作用。 谢谢你的帮助

 <?php 
  $sqlimg = "SELECT *, plaquettes.domaine AS  plaquettedomaine FROM images INNER JOIN plaquettes ON images.id = plaquettes.images_id";
    $resultsimg = $connexion->query($sqlimg);
    $plaquettesimg = $resultsimg->fetchAll(PDO::FETCH_OBJ);

 foreach($plaquettesimg as $pimg) { ?>
 <input type="hidden" value="<?php echo $pimg->name ?>" name="delete_img" >
  <input type="hidden" value="<?php echo $pimg->plaquettedomaine ?>" name="delete_domaine" >
 <?php } ?>
<button onclick="return confirm('Voulez vous vraiment supprimer cette plaquette ?')" type="submit" class="btn pull-left btn-danger" name="id" id="id" value="<?php echo $p->id ?>">Supprimer</button>
</form>

1 个答案:

答案 0 :(得分:2)

SELECT *, plaquettes.domaine AS  plaquettedomaine FROM images INNER JOIN plaquettes ON images.id = plaquettes.images_id

应该是这样的

SELECT p.*, p.domaine AS  plaquettedomaine
FROM
    images i
    INNER JOIN plaquettes p
    ON i.id = p.images_id

注意我正在使用表别名,以便更容易理解并减少输入。要对表进行别名,只需在表名和所需别名后面添加一个空格。

您获取所有列的原因是&#34; *&#34;。这将返回两个表的所有内容。因此,切换到p.*即可将其限制为plaquettes的所有列。请注意,在大多数情况下,使用*并不是一个好的代码,因为基础表中的潜在架构更改很可能会破坏您的应用程序。您应列出所需的特定列。 p.Id, p....