1

2 つの SQL テーブルがあります。

  • ニュース
  • 編集者

News テーブルには、2 つの列 (News_Added と News_Updated) があります。これらの列に編集者 ID を入力し、編集者テーブルの Ed_ID に結合して編集者名を取得しています。

2 つの while クエリがあるため、2 つの while ループを使用する必要がありますが、1 つの html テーブルで使用します。この問題を解決する方法がわかりません。何か助けはありますか?

echo '<table border="0">
<tr><th>News ID</th><th>Title</th><th>Added By</th><th>Last Edit By</th><th>Action</th</tr>';

$query = mysql_query("SELECT * FROM N1News AS N1
LEFT JOIN A1Editors AS A1 ON N1.N1_Addedby=A1.Ed_ID WHERE N1_Co=$Ed_Co ORDER BY N1_ID LIMIT $show,$limit");
    while($row = mysql_fetch_array($query)){
    echo '<tr><td align="center">'.$row["N1_ID"].'</td><td><a href="news_edit2.php?n_id='.$row["N1_ID"].'">'.$row["N1_Title"].'</a></td>
    <td><a href="news_edit2.php?n_id='.$row['N1_ID'].'"><img src="images/icons/hammer_screwdriver.png" alt="Edit News" /></a><a href="news_del.php?n_id='.$row["N1_ID"].'"><img src="images/icons/cross.png" alt="Delete News" /></a></td><td>'.$row["Ed_Name"].'</td>';
}
$query7 = mysql_query("SELECT * FROM N1News AS N1
LEFT JOIN A1Editors AS A1 ON N1.N1_Lastedit=A1.Ed_ID WHERE N1_Co=$Ed_Co ORDER BY N1_ID LIMIT $show,$limit");
    while($row7 = mysql_fetch_array($query7)){
    echo '<td>'.$row7["Ed_Name"].'</td>';
    } 
4

3 に答える 3

1

2 つのクエリを組み合わせるには、おそらくもっと効率的な方法がありますが、簡単な解決策は次を使用することUNIONです。

$query = "(SELECT * FROM N1News AS N1
            LEFT JOIN A1Editors AS A1 ON N1.N1_Addedby=A1.Ed_ID WHERE N1_Co=$Ed_Co ORDER BY N1_ID LIMIT $show,$limit)
          UNION
          (SELECT * FROM N1News AS N2
            LEFT JOIN A1Editors AS A2 ON N2.N1_Lastedit=A2.Ed_ID WHERE N1_Co=$Ed_Co ORDER BY N1_ID LIMIT $show,$limit)
          ORDER BY N1.N1_ID

そうすれば、すべての結果が 1 つの配列に含まれるため、テーブルを簡単に生成できます。

ところで、mysql_*関数は非推奨であり、実際には PDO または mysqli の準備済みステートメントに切り替える必要があります

于 2012-11-09T20:38:53.523 に答える
1

ここでの解決策は、すべての情報を一度に取得するクエリを作成することです。

SELECT N1.*, A1.ED_name addedby_name, A2.ED_name lasteditor_name FROM N1News AS N1
INNER JOIN A1Editors AS A1 ON N1.N1_Addedby=A1.Ed_ID
LEFT JOIN A1Editors AS A2 ON N1.N1_Lastedit=A2.Ed_ID
WHERE N1_Co=$Ed_Co
ORDER BY N1_ID
LIMIT $show,$limit

このクエリは、各ニュース アイテムが AddedBy エディターを参照していると想定していることに注意してください。このクエリでは、LastEdit への参照はオプションです。

于 2012-11-09T20:56:31.147 に答える
0

2 番目のクエリを最初の while に配置できます。

<?php
$query = mysql_query("SELECT * FROM N1News AS N1
LEFT JOIN A1Editors AS A1 ON N1.N1_Addedby=A1.Ed_ID WHERE N1_Co=$Ed_Co ORDER BY N1_ID LIMIT $show,$limit");
while($row = mysql_fetch_array($query)){
echo '<tr><td align="center">'.$row["N1_ID"].'</td><td><a href="news_edit2.php?n_id='.$row["N1_ID"].'">'.$row["N1_Title"].'</a></td>
    <td><a href="news_edit2.php?n_id='.$row['N1_ID'].'"><img src="images/icons/hammer_screwdriver.png" alt="Edit News" /></a><a href="news_del.php?n_id='.$row["N1_ID"].'"><img src="images/icons/cross.png" alt="Delete News" /></a></td><td>'.$row["Ed_Name"].'</td>';
    // call second query //
    $newsid = $row["N1_ID"];

    $query7 = mysql_query("SELECT * FROM N1News AS N1
    LEFT JOIN A1Editors AS A1 ON N1.N1_Lastedit=A1.Ed_ID WHERE N1_ID = ".$newsid." AND N1_Co=$Ed_Co ORDER BY N1_ID LIMIT $show,$limit");

    if($row7 = mysql_fetch_array($query7)){
    echo '<td>'.$row7["Ed_Name"].'</td>';
    }
    /////////////////////

    }

?>
于 2012-11-09T20:38:28.127 に答える