我有这个查询
$query = "SELECT * FROM items WHERE itemStatus = '1' AND itemAdded > '$timestamp'";
一旦此查询返回结果,我就会循环遍历结果
结果数组为 itemID、itemLocationID、categoryParentID、categoryID、itemName、itemDetails
在循环期间,我通过调用同一类中的函数来运行其他三个查询
$locationName = $this->getLocationByName($locationID);
$categoryParentName = $this->getCategoryByName($categoryParentID);
$categoryName = $this->getCategoryByName($categoryID);
函数 getLocationByName 执行此查询;
$q = mysql_query("SELECT * FROM locations WHERE locationID = '$locationID'");
这将返回一个由 locationID、locationName、locationLink 组成的数组
函数 getCategoryByName 执行此查询;
$q = mysql_query("SELECT * FROM categories WHERE categoryID = '$categoryID'");
这将返回一个包含categoryID、categoryName、categoryLink 的数组
有人可以帮我优化这个查询吗?也许加入他们可以节省大量查询。
提前致谢。
我现在使用这个查询
$q = mysql_query("SELECT
i.itemID,
i.locationID,
i.categoryParentID,
i.categoryID,
i.itemName,
i.itemDetails,
l.*,
c.*
来自 项目我 i.locationID = l.locationID 上的内连接位置 l i.categoryID = c.categoryID 上的内连接类别 c 在哪里 项目状态 = '1' AND itemAdded > '$timestamp'")or die(mysql_error());
结果是
Array
( [商品ID] => 81300 [位置ID] => 17 [类别父 ID] => 21 [类别ID] => 183 [元素名称] => 废话 [项目详细信息] => 废话 [locationName] => 太棒了,它按预期拉入了位置。 [locationLink] => 废话 [categoryName] => 太棒了,它按预期拉入了类别。 [categoryLink] => 废话 )
[categoryName] => //these are missing for categoryParentID
[categoryLink] => //these are missing for categoryParentID
最佳答案
我不会在 select 语句中使用 * 带有连接的查询可能是
SELECT
i.itemID,
i.itemLocationID,
i.categoryParentID,
i.categoryID,
i.itemName,
i.itemDetails,
l.*,
c.*
FROM
items i
inner join locations l on i.itemLocationID = l.locationID
inner join categories c on i.categoryID = c.categoryID
WHERE
itemStatus = '1'
AND itemAdded > '$timestamp'
希望对您有用。 干杯!
关于mysql - 在 MySQL 查询中连接表而不是多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14961728/