0

クラシファイド Web サイトでこれを正しく機能させるのに問題がありますが、基本的には、Item テーブル LIMIT 40 からすべてを取得してページに表示しています。難しい部分として、カテゴリの名前を含むカテゴリ テーブルからすべてを取得しています (各カテゴリ名には相対 ID があります)。IDがアイテムのIDと等しい場合、カテゴリの名前を出力する必要があります。うまくいけば、コードは明確にするのに役立ちます:

$sql = mysql_query("SELECT * FROM table_item ORDER BY creationtime DESC LIMIT 40");
$sql2 = mysql_query("SELECT * FROM table_category");
$ad_count = mysql_num_rows($sql);
$row2 = mysql_fetch_array($sql2);

if($ad_count > 0){
  while($row = mysql_fetch_array($sql)){
    $item_categoryId = $row["cid"];
    $categoryId = $row2["id"];
    $categoryName = $row2["name"];
    while($item_categoryId == $categoryId){
      $catName = $categoryName;
    }
    echo $catName;
  }
}

さて、私が提示したものよりもコードにもう少しあります。私はこれを短くて甘くしようとしました. カテゴリ名をエコーする代わりに、実際には HTML テーブルの行に入れられ、さらに多くの情報も入れられます。カテゴリ名を何もしなくてもすべて問題なく動作しますが、アクセスして比較するために何かを構築しようとすると、すべてがうまくいきません。

また、このネストされた while ループは、これを行うための最良の方法のように思われ (私は多くの方法を試しました)、これに対して得られるエラーは、「予期しない '}' があります」ということです。

4

1 に答える 1

1

ネストされたループの代わりに結合を使用します。

SELECT
    *
FROM
    table_item,
INNER JOIN
    table_category
ON
    table_item.cid=table_category.id
ORDER BY
    creationtime DESC
LIMIT 40

すべてのアイテムに対応するカテゴリがない場合は、INNER JOIN の代わりに LEFT JOIN を使用します。

于 2013-09-20T05:19:16.257 に答える