使用以下代码:
//turn items into an array
$item_array = array('abc','xyz2','Good','nice-b');
//implode items, turn into string
$item_implode = join("','", $item_array);
//declare an overall array for result
$product_items = array();
$productList = array();
$result = $mysqli->query("SELECT Name, WebsitePrice as price, WebsiteStock as stock from table_products where Name IN ('$item_implode')");
if ($result->num_rows > 0) {
$x = 1;
// output data of each row
while($row = $result->fetch_assoc()) {
$product_items[$x]["Name"] = $row['Name'];
$product_items[$x]["price"] = $row['price'];
$product_items[$x]["stock"] = $row['stock'];
$x = $x + 1;
}
} else {
echo "0 results";
}
我收到了这个输出:
abc- 99 - yes
xyz - 20 - yes
Good - 30 - yes
nice-b - 55 - yes
但是,当我使用名为Hello1
而非Good
的项目时,就像这样:
$item_array = array('abc','xyz2','Hello1','nice-b');
我收到了这个输出:
abc- 99 - yes
Hello1 - 77 - yes
xyz - 20 - yes
nice-b - 55 - yes
意味着对象的名称会导致数组顺序发生一些变化,并且它变为 第二个 项,即使它应该是 第三个 一个。
造成这种情况的原因是什么?
答案 0 :(得分:1)
在查询中使用ORDER BY FIELD(Name, 'abc','xyz2','Good','nice-b');
。您可以使用$item_implode
来重复使用。
[摘自评论]
答案 1 :(得分:0)
在SQL世界中,顺序不是一组数据的固有属性。因此,除非您使用ORDER BY子句查询数据,否则您的RDBMS无法保证您的数据将以特定顺序返回 - 或者甚至以一致的顺序返回 - 除非您使用ORDER BY子句查询数据。
无法保证MySQL会按照您在IN
子句中设置ID的顺序返回结果。
稍后修改:根据您的上一条评论,您可以执行以下操作:
if ($result->num_rows > 0) {
$product_items = array_flip($item_array);
// output data of each row
while($row = $result->fetch_assoc()) {
$product_items[$row['Name']] = array();
$product_items[$row['Name']]["Name"] = $row['Name'];
$product_items[$row['Name']]["price"] = $row['price'];
$product_items[$row['Name']]["stock"] = $row['stock'];
}
}