使用PHP和mySQL只打印一个查询结果?

时间:2014-10-02 19:10:48

标签: php mysql logic

我正在使用mySQL和PHP,我遇到了一整天思考的问题,我不确定我的困难是不知道可能会要求的一些预先命令,你能不能请帮助

这就是事情:我正在使用一个旧数据库,我不想更改其中的表,所以我需要使用两个表:

  • 相册:此表只有两个字段,id_album和album_name;
  • 照片:此表格包含照片的路径,并通过字段id_album链接到相册表;

我想构建一个列出所有相册的页面,每个人都会有一个缩略图,我从“照片”表中取出,在这种情况下,我只需要为每张专辑列出一张照片,而且我不知道如何编写代码,这是我到目前为止所得到的:

  <?php

  $comando = "SELECT * FROM album";

    $consulta = mysql_query($comando, $database)

        or die('Error:<br/>'.$comando);

    while($dados = mysql_fetch_array($consulta)) {


        $comando1 = "SELECT * FROM photos WHERE album = '".$dados['id_album']."'";
        $consulta1 = mysql_query($comando1, $database)
        or die('Error'.$comando1);

        while($dados1= mysql_fetch_array($consulta1)){          
          print '<li><a href="photos.php?Cod='.$dados['id_album'].'"><img src="'.$dados1['foto'].'"/></a><br/><a href="photos.php?Cod='.$dados['id_album'].'"> ' .$dados['album_name']. '</a></li>';

    }}

    ?>

它工作正常,但它列出了所有相册中的所有照片。有没有办法让我为每张专辑打印一张照片?

提前非常感谢你!

3 个答案:

答案 0 :(得分:1)

$comando1 = "SELECT * FROM photos WHERE album = '".$dados['id_album']."' LIMIT 1";

您应该加入查询。使用像

这样的东西
$comando = "
   SELECT album.id_album, photos.* FROM `album` 
   LEFT JOIN `photos` on photos.album = album.id_album
   GROUP BY album.id_album";

答案 1 :(得分:0)

while($dados = mysql_fetch_array($consulta)) {

$comando1 = "SELECT * FROM photos WHERE album = '".$dados['id_album']."' LIMIT 1 order by rand()";
$consulta1 = mysql_query($comando1, $database) or die('Error'.$comando1);

$dados1= mysql_fetch_row($consulta1);        
print '<li><a href="photos.php?Cod='.$dados['id_album'].'"><img src="'.$dados1['foto'].'"/></a><br/><a href="photos.php?Cod='.$dados['id_album'].'"> ' .$dados['album_name']. '</a></li>';

}

但你真的应该使用MySqli或其他东西..

答案 2 :(得分:0)

是的,您使用GROUP_CONCAT的单个查询获取相册的照片,SUBSTRING_INDEX选择一张照片

SELECT a.* ,SUBSTRING_INDEX(GROUP_CONCAT(p.foto),',',1) AS foto
FROM album a
LEFT JOIN photos p ON(a.id_album = p.id_album)
GROUP BY a.id_album

您还可以通过照片表格中的自动增量列在ORDER BY中指定GROUP_CONCAT,以选择最新或第一个GROUP_CONCAT(p.foto ORDER BY p.id DESC)。还有评论中提到的tadman您正在使用折旧mysql_* {1}}家庭功能更好地从PDO开始

<?php

$dbh = new PDO('mysql:host=yourhost;dbname=dbname', 'user', 'pass');
$sth = $dbh->prepare("SELECT a.* ,SUBSTRING_INDEX(GROUP_CONCAT(p.foto),',',1) AS foto
FROM album a
LEFT JOIN photos p ON(a.id_album = p.id_album)
GROUP BY a.id_album
");
$sth->execute();
$result = $sth->fetchAll(); 

foreach($result as $res){

  echo '<li><a href="photos.php?Cod='.$res['id_album'].'"><img src="'.$res['foto'].'"/></a><br/><a href="photos.php?Cod='.$res['id_album'].'"> ' .$res['album_name']. '</a></li>';
}
?>

PDO::errorInfo

同样在开发过程中,您应该在执行

之前关注错误
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 
if (!$sth) { 
    echo "\nPDO::errorInfo():\n"; 
    print_r($dbh->errorInfo()); 
}