字段不同的MySQL更新

时间:2012-04-14 19:38:02

标签: php mysql

我对MySQL查询有疑问。我(显然)希望尽可能少地使用这个查询,希望只有一个。我要做的是如果信息不同,则更新数据库中的列。

例如,假设我有“referer”列和“date”列。如果用户单击链接并且引用者不同但日期相同,我只想更新引用列。

这是我目前的查询:

mysql_query ("
  UPDATE clicks 
  SET 
    clicks = clicks + 1
  , referers = CONCAT(referers, ',$referer')
  , dates = CONCAT(dates, ',$date')
  WHERE shortURL = '$url' 
  AND referer != $referer
");

有没有办法将其用于一个查询?

2 个答案:

答案 0 :(得分:1)

您应该阅读有关数据库规范化的内容。 第一个规范化规则是:字段必须是原子的。在您的情况下:不要将多个引用/日期保存到一个以逗号分隔的字段中。

答案 1 :(得分:0)

我同意规范化答案,但如果你坚持......听起来你需要一个CASE声明:

UPDATE clicks
SET 
  clicks = clicks + 1
, referers = CONCAT(referers, ',$referer')
, dates = 
   CASE
     WHEN dates REGEXP '/$date/' THEN dates
     ELSE CONCAT(dates, ',$date')
   END CASE
WHERE shortURL = '$url' 
AND referers NOT REGEXP '/$referer/'

注意:这假设$ referer和$ date没有任何特殊的正则表达式字符!