1

PHP を使用して、同じ値で接続されている 3 つのテーブルの結果をリンクしようとしています。次に、関連する結果の各動的セットを、ページ上で while ループとして繰り返すようにします。これは私が望む結果です:

アーティスト->

シリーズ1→ピース1、ピース2 シリーズ2→ピース3、ピース
4

アーティスト テーブルとシリーズ テーブルは、「アーティスト」という名前の一致する列を共有します。シリーズとピース テーブルには、一致する列名「シリーズ」があります。これらのテーブルは、別のページでカスケード削除が機能しているため、データベース内の同じ一致する値を介してリンクされていることがわかっています。

現在、シリーズはエコー リピート ループとしてのみ表示されますが、いずれの側にもアーティストや作品は関連付けられていません。そのように: 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);
?>

私はこれに何日も取り組んできたので、どんな助けも大歓迎です!

4

4 に答える 4

2

Working from your code, here's a version converted to mysqli, with some of the redundant lines removed. I haven't been able to test this, so a little debugging might be required.

<?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>
于 2013-07-18T00:21:19.850 に答える
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 />';
}

mysql 拡張機能は現在廃止されているため、mysqli または PDO も使用する必要がありますが、すべてを変更せずに、同様のjust add a i変換ではなく、暫定的な解決策としてこれを試すことができます。

于 2013-07-18T00:05:03.163 に答える