SQLクエリをクリーンアップし、かつて2つのクエリを使用していた1つだけでJOINを使用しようとしています。
以前のコード(PHP)は次のとおりです。
$cat = "books"; // as a test
$query = "SELECT category, cat_id FROM master_cat WHERE category = '{$cat}'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$cat_id = $row['cat_id'];
}
$sql = mysql_query("SELECT item, spam, cat_id FROM items WHERE cat_id = ' " . $cat_id . "' ORDER BY TRIM(LEADING 'The ' FROM item) ASC;");
while ($row = mysql_fetch_assoc($sql))
if ($row['spam'] < 2)
$output[] = $row;
print(json_encode($output)); // added!
一番上のクエリを削除してJOINを使用しようとしています。更新されたSQLステートメントは次のとおりです。
編集:私は元の質問を間違えました。基本的に、ユーザー入力は$ cat="something"を与えます。master_catテーブルにcat_idを持つ「何か」があります。そのcat_idはitemsテーブルにもあります。ここで接続するテーブルが必要です。WHERE句には「$cat」を組み込む必要があります。
更新されたクエリ:
$result = mysql_query("SELECT i.item, i.spam, mc.cat_id AS Category
FROM items as i
INNER JOIN master_cat as mc
ON i.cat_id = mc.cat_id
WHERE i.cat_id = '{$cat}'
ORDER BY TRIM(LEADING 'The ' FROM i.item) ASC;");
それから:
while ($row = mysql_fetch_assoc($result))
if ($row['spam'] < 2)
$output[] = $row;
私はこれをブラウザで受け取ります:null。
誰かがJOINを適切に使用する方法を教えてもらえますか?私はここで本当に物事をクリーンアップし、より効率的なコーディングを行うことがわかっています。チュートリアルを見たばかりですが、まだ十分に理解できていません。
これが機能する最終的なコードです
$cat = $_POST['category']; // yes, yes, injection. this is just the short version.
$result = mysql_query("SELECT i.item, i.cat_id, i.spam, mc.cat_id, mc.category, TRIM(LEADING 'The ' FROM i.item) as CleanItem
FROM items as i
INNER JOIN master_cat as mc
ON i.cat_id = mc.cat_id
WHERE mc.category = '{$cat}'
ORDER BY CleanItem ASC;");
while ($row = mysql_fetch_assoc($result))
if ($row['spam'] < 2)
$output[] = $row;