我需要查询(读取)一些数据,然后在另一个表上执行另一个查询(读取)之前对其进行分析。
我查看了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();
提前谢谢。
答案 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
则会匹配,如果值为red
且redColorType
,则它仍会匹配。