mysql - 在 MySQL 查询中连接表而不是多个查询

标签 mysql join

我有这个查询

$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/

相关文章:

mysql - GROUP BY 上的三个表联接不会产生正确的结果

php - SQL 查询问题 - 每年的客户支出总和

php - 使用 Codeigniter 更新数据库表中的字段状态

mysql - 如何在MySQL中高效查找两个日期之间的特定天数?

mysql - 从具有多个子查询/联接的 Select 语句创建 View

mysql 查询从 3 个表连接信息 - 得到不正确的结果计数

mysql - 连接 MySQL 表,选择以字符串开头的列的行并使用乘法进行过滤

javascript - 如何使用 ng-repeat 从包含 5 行的表中传递单个复选框值

php - MySQL查询显示问题

PHP/MySQL 多重嵌套 SELECT