我想清理我的SQL查詢,並在一個使用JOIN的地方使用TWO查詢。使用JOIN去除多餘的SQL查詢(使用PHP)
這裏是原代碼(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語句是這樣的:
編輯:我在原來的問題中犯了一個錯誤。基本上用戶輸入給我們$貓=「東西」。 master_cat表中有一個cat_id的「東西」。該cat_id也位於項目表中。這就是我需要的表連接 - 和WHERE子句需要結合 「$貓」
更新的查詢:
$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;
嘿感謝,這是一個明顯的錯誤,我錯過了。儘管仍然失敗。 – KickingLettuce 2012-07-24 22:10:55
@KickingLettuce'mysql_error()'說什麼?你是否也改變了'ORDER BY'這一行? – DaveRandom 2012-07-24 22:11:55
哦,不,我忘了。但我改變了它,它仍然是空白。 – KickingLettuce 2012-07-24 22:16:22