Php 在where子句中选择“product_code”,tb_prices.*而不是“=”,然后稍后检索数据。这样,您只能访问数据库两次,而不是1+n次,其中n是来自第一个查询的记录数。我理解您的解释和操作逻辑。。但我不确定我是否理解如何将其付诸实践。如果我请
Php 在where子句中选择“product_code”,tb_prices.*而不是“=”,然后稍后检索数据。这样,您只能访问数据库两次,而不是1+n次,其中n是来自第一个查询的记录数。我理解您的解释和操作逻辑。。但我不确定我是否理解如何将其付诸实践。如果我请,php,mysql,performance,Php,Mysql,Performance,在where子句中选择“product_code”,tb_prices.*而不是“=”,然后稍后检索数据。这样,您只能访问数据库两次,而不是1+n次,其中n是来自第一个查询的记录数。我理解您的解释和操作逻辑。。但我不确定我是否理解如何将其付诸实践。如果我请你给我举个例子,是不是太过分了?这是一个非常有趣的解决方案,我想了解如何利用它!非常感谢你!如果需要多次迭代,将查询放入while迭代可能会导致性能问题!我看到第二个查询的唯一参数是price\u code。如果一个查询没有while,在子句中
在where子句中选择“product_code”,tb_prices.*而不是“=”,然后稍后检索数据。这样,您只能访问数据库两次,而不是1+n次,其中n是来自第一个查询的记录数。我理解您的解释和操作逻辑。。但我不确定我是否理解如何将其付诸实践。如果我请你给我举个例子,是不是太过分了?这是一个非常有趣的解决方案,我想了解如何利用它!非常感谢你!如果需要多次迭代,将查询放入while迭代可能会导致性能问题!我看到第二个查询的唯一参数是
price\u code
。如果一个查询没有while,在子句中有一个,@Phate01,我知道这不是一个更好的解决方案,但是它也可以很好地进行大量重复(数千项)。你能用IN
子句给我建议一个更好的解决方案吗?因为,正如您在主要问题中所看到的,我从一个查询(使用JOIN)开始,但它不起作用!我的经验导致了这个解决方案:场景是我执行一个查询,对于从该查询返回的每个项目,我需要执行另一个查询。在您的情况下,对于每个“产品代码”,我需要查询以检索价格数据。您可以根据第一次查询的结果创建产品代码集合。然后只执行第二次查询一次,在where子句中设置“IN”而不是“=”,选择“product_code”,tb_prices.*并稍后检索数据。这样,您只能访问数据库两次,而不是1+n次,其中n是来自第一个查询的记录数。我理解您的解释和操作逻辑。。但我不确定我是否理解如何将其付诸实践。如果我请你给我举个例子,是不是太过分了?这是一个非常有趣的解决方案,我想了解如何利用它!非常感谢你!
$dati = mysqli_query($mysqli_connect, "
SELECT *
FROM $tb_products
LEFT JOIN $tb_categories ON $tb_products.product_category = $tb_categories.category_id_master
LEFT JOIN $tb_subcategories ON $tb_products.product_subcategory = $tb_subcategories.subcategory_id_master
LEFT JOIN $tb_logos ON $tb_products.product_logo = $tb_logos.logo_id_master
LEFT JOIN $tb_prices ON (
$tb_products.product_brand = $tb_prices.price_brand
AND $tb_products.product_code = $tb_prices.price_code
AND $tb_prices.price_validity = (
SELECT MAX($tb_prices.price_validity)
FROM $tb_prices
WHERE $tb_prices.price_validity<=DATE_ADD(CURDATE(), INTERVAL +0 DAY)
AND $tb_products.product_code = $tb_prices.price_code
)
)
WHERE $tb_products.product_language='$activeLanguage' AND $tb_products.product_category!=0
GROUP BY $tb_products.product_code
ORDER BY $tb_products.product_brand, $tb_categories.category_rank, $tb_subcategories.subcategory_rank, $tb_products.product_subcategory, $tb_products.product_rank
");
$dati = mysqli_query($mysqli_connect, "
SELECT *
FROM $tb_products
LEFT JOIN $tb_categories ON $tb_products.product_category = $tb_categories.category_id_master
LEFT JOIN $tb_subcategories ON $tb_products.product_subcategory = $tb_subcategories.subcategory_id_master
LEFT JOIN $tb_logos ON $tb_products.product_logo = $tb_logos.logo_id_master
WHERE $tb_products.product_language='$activeLanguage' AND $tb_products.product_category!=0
GROUP BY $tb_products.product_code
ORDER BY $tb_products.product_brand, $tb_categories.category_rank, $tb_subcategories.subcategory_rank, $tb_products.product_subcategory, $tb_products.product_rank
");
+----------------+-------------+
| price_id | int(3) |
| price_brand | varchar(5) |
| price_code | varchar(50) |
| price_value | float(10,2) |
| price_validity | date |
| price_language | varchar(2) |
+----------------+-------------+
$dati = mysqli_query($mysqli_connect, "
SELECT *
FROM $tb_products
LEFT JOIN $tb_categories ON $tb_products.product_category = $tb_categories.category_id_master
LEFT JOIN $tb_subcategories ON $tb_products.product_subcategory = $tb_subcategories.subcategory_id_master
LEFT JOIN $tb_logos ON $tb_products.product_logo = $tb_logos.logo_id_master
WHERE $tb_products.product_language='$activeLanguage' AND $tb_products.product_category!=0
GROUP BY $tb_products.product_code
ORDER BY $tb_products.product_brand, $tb_categories.category_rank, $tb_subcategories.subcategory_rank, $tb_products.product_subcategory, $tb_products.product_rank
");
while ($array = mysqli_fetch_array($dati)) {
$code = $array['product_code'];
$dati_prices = mysqli_query($mysqli_connect, "
SELECT *
FROM $tb_prices
WHERE $tb_prices.price_brand = '$brand' AND $tb_prices.price_code = '$code' AND $tb_prices.price_validity = (
SELECT MAX($tb_prices.price_validity)
FROM $tb_prices
WHERE $tb_prices.price_validity<=DATE_ADD(CURDATE(), INTERVAL +0 DAY) AND $tb_prices.price_code = '$code'
)
GROUP BY $tb_prices.price_code
") ;
}