从foreach内的表中获取数据是否正确/可能

khbbv19g  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(487)

如果我做错了什么,请纠正我。我想从表中获取数据并将其用作数组:

$InRating = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'seller_review`  WHERE `id_seller` = '.$value['id_seller']);

但是“$value['id\u seller']”的结果来自:

foreach ($SellerIn as $key => $value) {
  $value['id_seller']    
}

$sellerin-是对不同表的db查询
那么这样做是否正确:

foreach ($SellerIn as $key => $value) {
   $value['id_seller']
   $InRating = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'seller_review`  WHERE `id_seller` = '.$value['id_seller']);    
}
fzsnzjdm

fzsnzjdm1#

这听起来是正确的,但它将对中的每个元素进行sql查询 $SellerIn -可能会很慢:

foreach ($SellerIn as $key => $value) {
   $InRating = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'seller_review`  WHERE `id_seller` = '.$value['id_seller']);    
}

更好的解决方案是进行1次查询和检查 id_sellerIN :

$all_ids = implode(', ', array_map(function ($entry) {
  return $entry['id_seller'];
}, $SellerIn));

$InRating = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'seller_review`  WHERE `id_seller` IN ('.$all_ids.')');
xytpbqjk

xytpbqjk2#

这是有可能的,但这对表演真的不好。如果你有你的网站流量大,你会想击中数据库尽可能少。
所以为了优化这样的情况,你可以用where in。
像这样:

$ids = [];
foreach ($SellerIn as $key => $value) {
    $ids[] = $value['id_seller'];
}
$InRating = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'seller_review`  WHERE `id_seller` IN ('.implode(",",$ids).')');

编辑:你这么说的
$sellerin-是对不同表的db查询
因此,您可以将这两个查询混合到一个查询中

$InRating = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'seller_review`  WHERE `id_seller` IN ( SELECT id FROM different_table WHERE condition )');

相关问题