簡體   English   中英

使用PHP和mySQL僅打印查詢的一個結果?

[英]Print only one result of a query using PHP and mySQL?

我正在使用mySQL和PHP,遇到了一個查詢,整天都在思考,我不確定我的困難是否在於不知道可能需要為此提供一些高級命令,您能幫忙嗎?

事情是這樣的:我正在使用舊數據庫,並且我不想更改其中的表,因此我必須使用兩個表:

  • 專輯:此表只有兩個字段,id_album和album_name;
  • photos:此表保存照片的路徑,並通過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>';

    }}

    ?>

它工作正常,但是列出了所有相冊中的所有照片。 有什么辦法可以讓我為每張相冊僅打印一張照片?

提前非常感謝您!

$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";
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或其他方式。

是的,您可以對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

您還可以通過在照片表中的自動增量列在GROUP_CONCAT指定ORDER BY ,以選擇最新的或第一個作為GROUP_CONCAT(p.foto ORDER BY p.id DESC) 。此外,正如評論中提到的tadman,您正在使用已貶值的mysql_*系列函數最好從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()); 
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM