我正在尝试清理我的 SQL 查询并在我曾经使用过两个查询的地方使用 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;