【问题标题】:Insert a value based on a users location根据用户位置插入值
【发布时间】:2012-12-14 11:21:22
【问题描述】:

在 mySql 中,是否可以基于某些东西进行插入?就我而言,我想根据用户的位置进行插入。这些位置就像美国、英国、澳大利亚、加利福尼亚等。 因此,如果位置是美国,我想为英国 2-001、2-002 等做 1-0001、1-0002 等。

也许通过使用类似的案例这可能是可能的?

我当前的插入是这样的:

insert into prodClassifieds (userId, userName, classStatus, classCountry, classId)
   select
     $userId, 
     '$userName', 
     1,
     '$userCountry',
     IFNULL((MAX(classId)+1) ,0)
   FROM prodClassifieds

编辑:我可以省略 1-0001 中的 -。 MAX(col) 也是 MAX(classId) 不是我最初发布的那个。下一个值是 1 + 当前值。

【问题讨论】:

  • 是的,可以使用CASE。您要修改哪个值?哪一列的结果是1-0001?
  • 将位置值放入表中并加入
  • 如果您尝试为classId 构建那些,那将更加困难,因为MAX()+1 会受到竞争条件的影响......让我们知道如何使用这些,我们可以提供帮助。
  • @MichaelBerkowski classId
  • @Norman 这是一次性数据加载,还是通过实时站点不断更新?

标签: mysql sql


【解决方案1】:

是的,这是可能的,

insert into prodClassifieds 
(userId, userName, classStatus, classCountry, classId) 
select $userId, '$userName', 1,
'$userCountry', 
 case when userCountry='US' then 
MAX(sc_stack_id)+1 else 0 end
FROM prodClassifieds 

您可以根据需要添加多个条件

【讨论】:

  • 这是 OP 要应用此模式的最后一列(IFNULL())。
  • @MichaelBerkowski 但这总是会为所有国家/地区提供相同的结果,对吧??
  • 这就是为什么这很复杂,根据我上面的 cmets。您不能只将 1 添加到 MAX() 聚合(尤其是没有 GROUP BY)。
  • 是的 @MichaelBerkowski 感谢您的指导。按国家分组会解决这个问题吗?
  • 它有时会起作用,但如果同时插入 2 个查询,竞争条件可能会导致值不同步或 MAX()+1 的值相同为两者插入。
【解决方案2】:

使用 CASE WHEN 如下:

insert into prodClassifieds (userId, userName, classStatus, classCountry, classId)
   select
     $userId, 
     '$userName', 
     CASE '$userCountry' WHEN 'US' THEN 10000 WHEN 'UK' THEN 20000 ELSE 90000 END CASE
     + 1,
     '$userCountry',
     IFNULL((MAX(sc_stack_id)+1) ,0)
   FROM prodClassifieds 

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2021-08-08
    • 2016-08-29
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多