mysql_fetch_assoc用php回显链接表结果


mysql_fetch_assoc to echo linked table results with php

使用php,我试图链接由相同值连接的3个表的结果。然后,我希望每个相关结果的动态集合在页面上作为while循环重复。这是我想要的结果:

艺术家->

系列1->第1件、第2件
系列2->件3、件4

艺术家和系列表共享一个名为"艺术家"的匹配列。序列表和工件表具有匹配的列名"Series"。我知道这些表是通过数据库中的这个匹配值链接的,就像在另一个页面上级联删除一样。

目前,它只将该系列作为回声重复循环显示,但两侧都没有艺术家或作品相关。就像这样: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);
?>

任何帮助都将不胜感激,因为我已经在这方面工作了好几天了!

根据您的代码,这里有一个转换为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>

Firs我建议您使用面向对象的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,以便对其进行缓存。抱歉,如果格式很难阅读。使用滚动条。

您错过了为$row_artistrecordset编写while循环,就像为其他人编写一样,您的代码只有两个循环。

首先在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转换,你可以尝试将其作为一个临时解决方案。