【问题标题】:Select first greater value than the x in MySQL在MySQL中选择第一个大于x的值
【发布时间】:2016-03-25 06:43:21
【问题描述】:

我正在使用 Codeigniter 开发一个保险比较平台。 我有一个如下所示的包表:

+----------+--------------+------------+---------------------+-------------+
| tpckg_id | tpckg_people | tpckg_days | tpckg_policy_amount | tp_name     |
+----------+--------------+------------+---------------------+-------------+
|       21 | individual   | 10         | 1000                | Test25      |
|       22 | family       | 7          | 2000                | Testing     |
|       23 | individual   | 20         | 600                 | TPL Care    |
|       24 | family       | 10         | 1000                | TPL Care    |
|       25 | individual   | 15         | 650                 | Travel Care |
|       26 | family       | 10         | 1100                | TPL Care    |
|       27 | individual   | 7          | 500                 | TPL Care    |
|       28 | family       | 7          | 1200                | Travel Care |
|       29 | family       | 10         | 500                 | TPL Care 2  |
|       30 | individual   | 11         | 500                 | TPL Care    |
+----------+--------------+------------+---------------------+-------------+

现在,我正在使用此查询获取数据:

$this->db->select('travel_packages.tpckg_id, travel_packages.tpckg_people, travel_packages.tpckg_days, travel_packages.tpckg_policy_amount, travel_products.tp_name');

    $this->db->from('travel_packages');
    $this->db->join('travel_products', 'travel_products.tp_id = travel_packages.tpckg_products_id')

    $this->db->where('travel_packages.tpckg_people', 'Individual');
    $this->db->where('travel_packages.tpckg_days >= 10');

    $this->db->group_by('travel_packages.tpckg_policy_amount'); 
    $this->db->order_by('travel_packages.tpckg_policy_amount', 'ASC');

正如预期的那样,返回所有 tpckg_people = individual 和 tpckg_days >= 10 的记录 像这样:

+----------+--------------+------------+---------------------+-------------+
| tpckg_id | tpckg_people | tpckg_days | tpckg_policy_amount | tp_name     |
+----------+--------------+------------+---------------------+-------------+
|       21 | individual   | 10         | 1000                | Test25      |
|       23 | individual   | 20         | 600                 | TPL Care    |
|       25 | individual   | 15         | 650                 | Travel Care |
|       30 | individual   | 11         | 500                 | TPL Care    |
+----------+--------------+------------+---------------------+-------------+

如果没有与用户输入的数字相同,我希望它返回的只是第一个更大的天数。例如,如果用户输入 9 作为天数,而我没有包含 9 天的包裹,它应该返回每个产品的第一个更大的天数。

像这样:

+----------+--------------+------------+---------------------+-------------+
| tpckg_id | tpckg_people | tpckg_days | tpckg_policy_amount | tp_name     |
+----------+--------------+------------+---------------------+-------------+
|       21 | individual   | 10         | 1000                | Test25      |
|       25 | individual   | 15         | 650                 | Travel Care |
|       30 | individual   | 11         | 500                 | TPL Care    |
+----------+--------------+------------+---------------------+-------------+

请帮忙查询一下?提前致谢。 :-)

【问题讨论】:

  • 根据您想要的结果,我认为首先按 tpckg_policy_amount 排序,然后按 tp_name 而不是 tpckg_policy_amount 分组,您应该会得到想要的结果....
  • 是的。按 tpckg_policy_amount 分组显然很奇怪
  • 那是为了不同的目的,从低到高显示数量。我不应该将它包含在示例中。

标签: php mysql codeigniter


【解决方案1】:

这是一个原始查询...

Select x.* 
  From travel_packages x
  Join
     ( Select tp_name name
            , tpckg_people people
            , min(tpckg_days) min_days 
         from travel_packages 
        where tpckg_people = 'individual' 
          and tpckg_days >= 9 
        group 
           by name
            , people
     ) y
    On y.name = x.tp_name
   And y.people = x.tpckg_people
   And y.min_days = x.tpckg_days;

【讨论】:

  • 它不起作用,因为 tp_name 实际上不是同一个表的一部分。我将它与 travel_products 表一起加入。 'JOIN travel_products ON travel_products.tp_id = travel_packages.tpckg_product_id' 如何将其合并到此查询中?
  • @RazaJ.Chauhan 我们只能回答被问到的问题。如果您有不同的问题,请启动一个单独的线程,或修改您原来的问题以反映正确的情况。
猜你喜欢
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多