2016-04-03 8 views
2

Albüm seçildikten sonra sanatçı ayrıntılarını görüntülemeye çalışıyorum. Ama aynı zamanda sanatçıyla ilgili diğer albümler de gösterilmeli. Bunu başarmanın bir yolu var mı?Mysql sorguyu aynı artistID'ye sahip olan kayıt seçmek için ama farklı CDID

sol sütun CDID ve sağ sütun ArtistID olduğunu.

Bu benim şimdiki MySQL kodu: son çıkış Böyle bir şey alması gerekmektedir

<?php 

require "pdoDB.php"; 
$albumtitle = $_GET['title']; 
$db = database::connect(); 
$artistsql = "SELECT a.artistName, p.pubName, cd.CDTitle FROM tiptop_artist a 
      INNER JOIN tiptop_artistcd acd ON a.artistID = acd.artistID 
      INNER JOIN tiptop_cd cd ON cd.CDID = acd.CDID 
      INNER JOIN tiptop_publisher p ON p.pubID = cd.pubID 
      WHERE cd.CDTitle = ?"; 
$stmt = $db->prepare($artistsql); 
// $stmt->bindParam("catid", $categoryid); 
$stmt->execute(array($albumtitle)); 

echo "<table> 
<tr> 
<th>Artist Name</th> 
<th>Publisher</th> 
<th>Other Album</th> 
</tr>"; 

while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) { 
    echo "<tr style=\"cursor: pointer;\">"; 
    // echo "<td>" . $row1['artistName'] . "</td>"; 
    echo "<td>" . $row['artistName'] . "</td>"; 
    echo "<td>" . $row['pubName'] . "</td>"; 
    echo "<td>" . $row['CDTitle'] . "</td>"; 
    echo "</tr>"; 
} 

?> 

:

artist name | publisher | related albums by the artist 
------------------------------------------------------ 
hardwell | sony music| I am hardwell 
         | Spaceman 

şimdiden teşekkürler.

+0

Sanatçılar hangi tabloda saklanır? – prograhammer

+0

Son çıktının elde etmeye çalıştığınız şeyin bir örneğini eklemelisiniz. Sadece birkaç satırlık veri içeren ve ayrıntıların gösterilmesini istediğiniz kaba taslak bir örnek. Şimdiye kadar neler yaptığınızı bize gösterdiniz, ancak hala hangi çıktıyı istediğinizi belirleyemiyoruz. – prograhammer

+0

tamam sorularımı bir kez daha düzenleyeceğim – anonymous5671

cevap

0

Bunu tek bir sorguda veya birden fazla sorguda gerçekleştirebileceğiniz birkaç yol vardır. Bir noktada, hangisinin en performanslı olduğunu görmek için farklı sorgu stratejilerini karşılaştırmanız gerekebilir.

(Not:. Aşağıdaki örnekte, muhtemelen ikinci sorguyu çalıştırmadan önce sonuçları döndürür sağlamak için ilk sorgusunun ardından bir çek eklemek isteyeceksiniz)

İşte iki sorguları kullanarak bir örnek: Burada başka zeki (ve muhtemelen daha fazla ölçülebilir var

SELECT artist.name as 'artist.name', 
     publisher.name as 'publisher.name', 
     cd.title as 'cd.title', 
     albums.title as 'albums.title' 
FROM tiptop_cd as cd 
INNER JOIN tiptop_artistcd as artistcd ON(artistcd.cd_id = cd.id) 
INNER JOIN tiptop_artist as artist ON(artist.id = artistcd.artist_id) 
INNER JOIN tiptop_publisher as publisher ON(publisher.id = cd.publisher_id) 
INNER JOIN tiptop_artistcd as artistcd2 ON(artistcd2.artist_id = artist.id) 
INNER JOIN tiptop_cd as albums ON(albums.id = artistcd2.cd_id) 
WHERE cd.title = :title 

: Burada

$sql = "SELECT artist.name as 'artist.name', 
       artist.id as 'artist.id', 
       publisher.name as 'publisher.name', 
       cd.title as 'cd.title', 
       cd.id as 'cd.id' 
     FROM tiptop_cd as cd 
     INNER JOIN tiptop_artistcd as artistcd ON(artistcd.cd_id = cd.id) 
     INNER JOIN tiptop_artist as artist ON(artist.id = artistcd.artist_id) 
     INNER JOIN tiptop_publisher as publisher ON(publisher.id = cd.publisher_id) 
     WHERE cd.title = :title"; 

$stmt = $db->prepare($artistsql); 
$stmt->bindParam(":title", $_GET['title']); 
$stmt->execute(); 
$details = $stmt->fetch(PDO::FETCH_ASSOC); 

$sql = "SELECT cd.title as 'cd.title' 
     FROM tiptop_artistcd as artistcd 
     INNER JOIN tiptop_cd as cd ON(cd.id = artistcd.cd_id AND cd.id != :cd_id) 
     WHERE artistcd.artist_id = :artist_id"; 

$stmt = $db->prepare($artistsql); 
$stmt->bindParam(":artist_id", $details['artist.id']); 
$stmt->bindParam(":cd_id", $details['cd.id']); 
$stmt->execute(); 

echo "<table>". 
    "<tr>". 
    "<th>Artist Name</th>". 
    "<th>Publisher</th>". 
    "<th>Other Album</th>". 
    "</tr>". 

    "<tr>". 
    "<td>".$details['artist.name']."</td>". 
    "<td>".$details['publisher.name']."</td>". 
    "<td>".$details['cd.title']."</td>". 
    "</tr>"; 

while ($album = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    echo "<tr style=\"cursor: pointer;\">"; 
    echo "<td></td>"; 
    echo "<td></td>"; 
    echo "<td>" . $album['cd.title'] . "</td>"; 
    echo "</tr>"; 
} 

echo "</table"; 

tek bir sorgu versiyonu) tek bir sorguda bunu yapmak için. Geri gönderilen ilk satır, ayrıntılarınızı ve geçerli seçili cd'leri ve kalan satırları diğer albümleri içerecektir:

SELECT artist.name as 'artist.name', 
     publisher.name as 'publisher.name', 
     cd.title as 'cd.title', 
     IF(cd.title = :title, 1, 0) as selected 
FROM tiptop_cd as cd 
INNER JOIN tiptop_artistcd as artistcd ON(artistcd.cd_id = cd.id) 
INNER JOIN tiptop_artist as artist ON(artist.id = artistcd.artist_id) 
INNER JOIN tiptop_publisher as publisher ON(publisher.id = cd.publisher_id) 
ORDER BY selected DESC 
+0

tüm sanatçı adını görüntülüyor .. Sadece ilgili albümleri görüntülemek istiyorum sanatçı sadece – anonymous5671

+0

ilk sorguyu denedim ama undefined ofset alıyorum 0 – anonymous5671

+0

@ anonymous5671 Oh, üzgünüm, cevabı güncelledim. Sadece '$ details = $ stmt-> getir (PDO :: FETCH_ASSOC); 'dir. – prograhammer

İlgili konular