2013-07-17 81 views
1

使用php,我試圖鏈接3個由相同值連接的表的結果。然後,我會將每個動態相關結果集作爲頁面上的while循環重複。這是結果,我想:mysql_fetch_assoc使用php回顯鏈接的表結果

artist->

series1-> piece1,piece2
series2-> piece3,所以piece4

藝術家和系列表共享名爲 '藝術家' 匹配列。系列和片斷表具有匹配的列名稱「系列」。我知道這些表通過數據庫中相同的匹配值鏈接到另一頁級聯刪除正在工作。

目前它只顯示該系列作爲回聲重複循環,但沒有任何藝術家或片在任何一方相關。像這樣:http://www.exhibitjewellery.com/artistindex.php

是否一個mysql_fetch_assoc是正確的方式,我不知道。我很困惑,表格是否正確鏈接,或者如果問題是我如何分割正文部分進行格式化。我有一種感覺,多維數組可能會幫助甚至嵌套表格,但我並沒有完全理解代碼中每個部分的所有細節。請幫忙!

PHP的頭頂:

<?php 
mysql_select_db($database_connectmysql, $connectmysql); 
$query_artistrecordset = "SELECT * FROM artists ORDER BY artist ASC"; 
$artistrecordset = mysql_query($query_artistrecordset, $connectmysql) or die(mysql_error()); 
$row_artistrecordset = mysql_fetch_assoc($artistrecordset); 
$totalRows_artistrecordset = mysql_num_rows($artistrecordset); 

mysql_select_db($database_connectmysql, $connectmysql); 
$query_seriesrecordset = "SELECT * FROM series, artists WHERE series.artist=artists.artist ORDER BY exhibition ASC"; 
$seriesrecordset = mysql_query($query_seriesrecordset, $connectmysql) or die(mysql_error()); 
$resultseries = mysql_query($query_seriesrecordset); 
$row_seriesrecordset = mysql_fetch_assoc($resultseries); 
$totalRows_seriesrecordset = mysql_num_rows($seriesrecordset); 

mysql_select_db($database_connectmysql, $connectmysql); 
$query_piecerecordset = "SELECT * FROM pieces,series WHERE pieces.piece=series.series ORDER BY piece ASC"; 
$piecerecordset = mysql_query($query_piecerecordset, $connectmysql) or die(mysql_error()); 
$resultpiece = mysql_query($query_piecerecordset); 
$row_piecerecordset = mysql_fetch_assoc($resultpiece); 
$totalRows_piecerecordset = mysql_num_rows($piecerecordset); 
?> 

這是我曾嘗試呼應它在體內:

<div id="serieslist" align="right"> 
    <?php echo $row_artistrecordset['artist']; ?><br /> 
    <?php echo $row_artistrecordset['website']; ?><br /> 
    <?php echo $row_artistrecordset['artist_statement']; ?><br /> 
<?php do { ?> 
    <?php echo $row_seriesrecordset['series']; ?><br /> 
    <?php echo $row_seriesrecordset['exhibition']; ?><br /> 
    <?php echo $row_seriesrecordset['series_statement']; ?><br /> 
<?php do { ?> 
     <?php echo $row_piecerecordset['piece']; ?><br /> 
     <?php echo $row_piecerecordset['description']; ?><br /> 
     <?php echo $row_piecerecordset['category']; ?><br /> 
     <?php echo $row_piecerecordset['dimensions']; ?><br /> 
     <?php echo $row_piecerecordset['price']; ?><br /> 
      add to collection button<br />   
    <?php } while ($row_piecerecordset = mysql_fetch_assoc($resultpiece)); ?> 
    <?php } while ($row_seriesrecordset = mysql_fetch_assoc($resultseries)); ?>  
</div> 
</body> 
</html> 
<?php 
mysql_free_result($artistrecordset); 
mysql_free_result($seriesrecordset); 
mysql_free_result($piecerecordset); 
?> 

任何幫助,因爲我一直在做這個的不勝感激天!

+0

的第一道命令:**不要**使用'mysql'。它已被棄用,並在最新版本的PHP中被刪除。改爲使用'mysqli'或'PDO'。 – 2013-07-17 23:53:22

+0

當然,我需要更改哪些內容才能升級?我只需在'mysql'短語之後放置'i'? – sarah369

+0

這裏是[參考](http://php.net/manual/en/book.mysqli.php)。 'mysqli'與'mysql'非常相似,但是你確實需要看 – 2013-07-18 00:00:41

回答

1

冷杉我建議你使用面向對象的PHP。保持這個名爲db.php中一個單獨的,安全的頁面上,或者說:

//db.php 
<?php 
    function db(){ 
    return new mysqli('replaceWithHostName', 'relaceWithUserName', 'replaceWithPassWord', 'replaceWithDatebaseName'); 
    } 
?> 

現在對於其他網頁:

//other.php 
<?php 
include('db.php'); $db = db(); $nr = 'No Results Were Found'; $od = '<div>'; $cd = '</div>'; $br = '<br />'; $ar = $sr = $pr = ''; 
$artistrecordset = $db->query('SELECT * FROM artists ORDER BY artist ASC'); 
if(!$artistrecordset)die($db->error); 
if($artistrecordset->num_rows > 0){ 
    while($row_ar = $artistrecordset->fetch_assoc()){ 
    $ar .= $od.$row_ar['artist'].$br.$row_ar['website'].$br.$row_ar['artist_statement'].$cd; 
    } 
    $artistrecordset->free(); 
} 
else){ 
    die($nr); 
} 
$seriesrecordset = $db->query('SELECT * FROM series, artists WHERE series.artist=artists.artist ORDER BY exhibition ASC'); 
if(!$seriesrecordset)die($db->error); 
if($seriesrecordset->num_rows > 0){ 
    while($row_sr = $seriesrecordset->fetch_assoc()){ 
    $sr .= $od.$row_sr['series'].$br.$row_sr['exhibition'].$br.$row_sr['series_statement'].$cd; 
    } 
    $seriesrecordset->free(); 
} 
else){ 
    die($nr); 
} 
$piecerecordset = $db->query('SELECT * FROM pieces,series WHERE pieces.piece=series.series ORDER BY piece ASC'); 
if(!$piecerecordset)die($db->error); 
if($piecerecordset->num_rows > 0){ 
    while($row_pr = $piecerecordset->fetch_assoc()){ 
    $pr .= $od.$row_pr['piece'].$br.$row_pr['description'].$br.$row_pr['category'].$br.$row_pr['dimensions'].$br.$row_pr['price'].$cd; 
    } 
    $piecerecordset->free(); 
} 
else){ 
    die($nr); 
} 
$db->close(); 
$head = '<html><head></head><body>'; //this could be your other info 
echo "$head<div id='serieslist' align='right'>$ar$sr$pr$cd". 
"<script type='text/javascript'>/*you should put your JavaScript here*/</script>". 
'</body></html>'; 
?> 

真的,你應該使用你的JavaScript外部src所以它的緩存。對不起,如果格式很難閱讀。使用滾動條。

0

你錯過了寫while循環的$row_artistrecordset就像你也爲別人做的那樣,看你的代碼只有兩個循環。

+0

好的,所以我不重複這個藝術家,因爲每個結果集只會在頁面上顯示一個藝術家。我認爲,我有件和系列向下探底while循環在以前的實驗中這似乎是結果如何包裝成一個列表,但我可能是錯.... – sarah369

+0

也,爲什麼$ row_piecerecordset是$ row_seriesrecordset內? – 2013-07-18 00:03:40

+0

這是我在其他實驗中獲得系列 - >片段顯示結果的一種方式。我改變了它,藝術家和系列的任何一方的結果仍然不顯示 – sarah369

0

先在phpMyAdmin之類的東西中試試這個查詢,看它是否得到你想要的結果。

SELECT * 
FROM artists a 
JOIN series s ON s.artist = a.artist 
JOIN pieces p ON p.series = s.series 
ORDER BY a.artist; 

然後像這樣處理單個結果。

mysql_select_db($database_connectmysql, $connectmysql); 
$q = "SELECT * FROM artists a 
     JOIN series s ON s.artist = a.artist 
     JOIN pieces p ON p.series = s.series 
     ORDER BY a.artist"; 

$result = mysql_query($q, $connectmysql) or die(mysql_error()); 

foreach ($row = mysql_fetch_assoc($result)) { 
    echo $row['artist'] . '<br />'; 
    echo $row['website'] . '<br />'; 
    echo $row['artist_statement'] . '<br />'; 
    echo $row['series'] . '<br />'; 
    echo $row['exhibition'] . '<br />'; 
    echo $row['series_statement'] . '<br />'; 
    echo $row['piece'] . '<br />'; 
    echo $row['description'] . '<br />'; 
    echo $row['category'] . '<br />'; 
    echo $row['dimensions'] . '<br />'; 
    echo $row['price'] . '<br />'; 
    echo ' add to collection button<br />'; 
} 

好了,你也使用mysqli或PDO的MySQL擴展現在已經過時了,但沒有改變一切,它不是一個喜歡像just add a i轉換,你可以試試這個作爲一個臨時的解決方案。

+0

三江源,我一直試圖找到一種簡單的方法這樣做一段時間!只是爲了確認,我用我已經掌握的全部內容替換了你的代碼?或者這除了? – sarah369

+0

在頭部的回聲方案不允許我格式化的HTML頁面,我發現很難再放置在體內的呼應,所以我可以把它包裝的佈局。也有對碼 – sarah369

2

從你的代碼開始工作,這裏是一個轉換爲mysqli的版本,刪除了一些冗餘行。我沒有能夠測試這個,所以可能需要一些調試。

<?php 
$connectmysql = mysqli_connect("dbhost","dbuser","dbname","dbname") or die("Database error:".mysqli_connect_error); 

$query_artistrecordset = "SELECT * FROM artists ORDER BY artist ASC"; 
$artistrecordset = mysqli_query($connectmysql, $query_artistrecordset) or die(mysqli_error); 

$query_seriesrecordset = "SELECT * FROM series, artists WHERE series.artist=artists.artist ORDER BY exhibition ASC"; 
$seriesrecordset = mysqli_query($connectmysql, $query_seriesrecordset) or die(mysqli_error); 

$query_piecerecordset = "SELECT * FROM pieces,series WHERE pieces.piece=series.series ORDER BY piece ASC"; 
$piecerecordset = mysqli_query($connectmysql, $query_piecerecordset) or die(mysqli_error); 

echo "<div id="serieslist" align="right">" 

while ($row_artistrecordset = mysqli_fetch_assoc($artistrecordset)) { 
    echo $row_artistrecordset['artist'],"<br>"; 
    echo $row_artistrecordset['website'],"<br>"; 
    echo $row_artistrecordset['artist_statement'],"<br>"; 
while ($row_seriesrecordset = mysqli_fetch_assoc($seriesrecordset)) { 
    echo $row_seriesrecordset['series'],"<br>"; 
    echo $row_seriesrecordset['exhibition'],"<br>"; 
    echo $row_seriesrecordset['series_statement'],"<br>"; 
while ($row_piecerecordset = mysqli_fetch_assoc($piecerecordset)) { 

    echo $row_piecerecordset['piece'],"<br>"; 
    echo $row_piecerecordset['description'],"<br>"; 
    echo $row_piecerecordset['category'],"<br>"; 
    echo $row_piecerecordset['dimensions'],"<br>"; 
    echo $row_piecerecordset['price'],"<br>"; 
     echo "add to collection button<br />";  
} // end of pieces 
} // end of series 
} //end of artists 
mysqli_free_result($artistrecordset); 
mysqli_free_result($seriesrecordset); 
mysqli_free_result($piecerecordset); 
echo "</div>"; 
?> 

</body> 
</html> 
+0

三江源的「的foreach」行了語法錯誤,這是升級的解決方案,我覺得有信心的工作,雖然它並沒有解決問題的鏈接,其對大的幫助很大框架其他問題! – sarah369

+0

儘管編輯了原始包含連接文件 – sarah369

+0

o我的連接,但此升級完全失敗了我的連接。現在它全部被毀壞了。 – sarah369