【问题标题】:(Laravel/PHP) SQL Query that selects all orders from table that matches product_id and variation_id in array(Laravel/PHP) SQL 查询,从表中选择与数组中的 product_id 和variation_id 匹配的所有订单
【发布时间】:2020-08-19 03:37:43
【问题描述】:

我正在尝试构建一个 SQL 查询,它将从与我定义的选项匹配的表中选择所有订单。

我使用的数据库:Mysql 语言:PHP

基本上我有一个看起来像这样的数组。

[
 [
   "user_id" => 1,
   "product_id" => 5548, 
   "variation_id" => 14
 ], 
 [
   "user_id" => 1, 
   "product_id" => 5548, 
   "variation_id" => 15
 ],
 [
   "user_id" => 1, 
   "product_id" => 4422, 
   "variation_id" => 4
 ]
]

这意味着用户(id:1)有一个“id”为 5548 的产品,然后他还有该产品的 2 个变体,“id”为 14 和 15。您也可以看到相同的用户拥有具有变体(id:4) 的产品(id:4422)。

然后我有一个看起来像这样的“order_lines”表

order_lines
+----+-----+---------+-----------------------------+
| id | uid | user_id | product_id  |  variation_id |
+----+-----+---------+-----------------------------+
| 1  |  1  |     1   |     5548    |       14      |
+----+-----+---------+-----------------------------+
| 2  |  2  |     1   |     5548    |       15      |
+----+-----+---------+-----------------------------+
| 3  |  3  |     1   |     4422    |        4      |
+----+-----+---------+-----------------------------+
| .  |  .  |     .   |     ....    |       ..      |
+----+-----+---------+-----------------------------+

我现在需要一个 SQL 查询来选择数组中定义的 user_id、product_id 和variation_id 之间存在匹配的所有行。

输出应包含满足这些条件的所有行。

我希望有人能把我钉在正确的方向上。

如果您手头有查询构建器,我将在 Laravel 中构建。否则我非常感谢 SQL 查询。

【问题讨论】:

  • 你能分享你试过的代码吗?

标签: php mysql laravel relational-database


【解决方案1】:

如果我说对了,下面的代码将帮助你,只使用核心 PHP

foreach($array as $arr){
    $user_id = $arr['user_id'];
    $prodct_id = $arr['prodct_id'];
    $variation_id = $arr['variation_id'];

    $query = "SELECT * FROM order_lines WHERE user_id = $userId AND product_id = $productId AND variation_id = $variationId";
    $queryResult = mysql_fetch_assoc($query);
    $yourCollection[] = $queryResult;
}
    print_r($yourCollection);

【讨论】:

  • 效率不高,对数据库的访问次数过多,当此循环运行 umteen 次时,对于实时网站来说听起来不太好
  • @MehravishTemkar,也许你是对的,但我认为这就是他所要求的。无论如何,他会阅读你的评论:)
  • @VishalParkash 正如 Mehravish Temkar 指出的那样,我实际上正在寻找一种更有效的方法。谢谢你的意见!
【解决方案2】:

尝试下面的代码来使用 Laravel Query Builder,下面的代码将帮助您根据产品和变体为多个用户获取结果。

$qb_order_lines = DB::table('order_lines');

$where_condition = [
    ['user_id' => '', 'product_id' => '', 'variation_id' => ''],
];

foreach ($where_condition as $condition) {
    $qb_order_lines->orWhere(function($query) use ($condition) {
        $query->where('user_id', $condition['user_id'])
                ->where('product_id', $condition['product_id'])
                ->where('variation_id', $condition['variation_id']);
    });
}
$obj_result = $qb_order_lines->get();

如果您只想为一个用户获取它,请使用以下代码

$obj_result = DB::table('order_lines')
        ->where('user_id', $condition['user_id'])
        ->where('product_id', $condition['product_id'])
        ->where('variation_id', $condition['variation_id'])
        ->get();

您可以根据您的要求修改上述查询构建器,例如选择字段或分组依据。

如果您需要任何帮助,请告诉我。

【讨论】:

    【解决方案3】:

    对于任何有趣的人。

    我的问题是我需要计算我的数组和数据库之间的许多匹配项。

    而不是选择和输出。我在查询中使用了 sql count() 函数,完成了这项工作。

    【讨论】:

    • 如果您提供用于解决问题的实际代码,这个答案会好很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2022-11-28
    • 2014-02-19
    • 2013-04-05
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    相关资源
    最近更新 更多