PHP MySQL执行多个依赖查询的最佳方式

时间:2017-12-05 22:04:27

标签: php mysql performance mysqli

我需要查询(读取)一些数据,然后在另一个表上执行另一个查询(读取)之前对其进行分析。

我查看了mysqli multiple statements,但他们没有第二个查询取决于第一个查询结果的情况的文档。

看来我目前执行两个查询的代码可能不是最佳的。有更好的方法吗?

//FIRST QUERY
$query1= "SELECT color FROM products WHERE type = '$productType';";
$result = $conn->query($query1);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $colorProduct = $row["color"];
    }
} 


//ANALYZE SEARCH RESULT FROM FIRST QUERY
if ($colorProduct == "green") {
    $colorType = "greenColorType";
}   
//a lot more analysis


//SECOND QUERY
$query2 = "SELECT price FROM Vendors WHERE color = '$colorType';";
$result2 = $conn->query($query2);

if ($result2->num_rows > 0) {
    while($row = $result2->fetch_assoc()) {
        $priceOfProduct = priceOfProduct . $row["price"];
    }
} 

$conn->close();

提前谢谢。

3 个答案:

答案 0 :(得分:1)

为什么不将这两个查询合并为一个,如果需要,可以稍后进行分析。例如:

"SELECT price FROM products
JOIN Vendors ON Vendors.color = products.color
WHERE type = $productType
AND color = 'green';"

MySQL是声明性语言,因此通常最好“告诉它”你想要什么,然后再修改数据(如果需要)。

答案 1 :(得分:0)

首先,您必须添加"和"到"其中"子句:SELECT颜色FROM产品WHERE type =' $ productType'和颜色='绿色'

然后你必须加入或在SQL中添加一个子查询。

实际上,您应该只执行一个SQL请求。

答案 2 :(得分:0)

在进行第二次查询之前,看起来vendor表中的颜色值都在实际颜色名称之后添加了ColorType,您在PHP中处理它。

Mysql可以为你做到这一点。这是一个例子:

"SELECT a.color, b.price FROM products a, vendors b WHERE a.type = '$productType' AND a.color = SUBSTR(b.color,1,LENGTH(a.color);"

WHERE子句指定$productType变量与表a(产品)的类型列匹配,表a中的颜色值与表中颜色值的开头匹配湾无论表a中的颜色长度如何,它都使用LENGTH语句进行匹配。因此,如果表格a中的颜色为darkblue而表格b为darkblueColorType则会匹配,如果值为redredColorType,则它仍会匹配。

相关问题