0

我有一个关于 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
");

有什么方法可以将其整合到一个查询中吗?

4

2 回答 2

1

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

于 2012-04-14T19:50:33.013 回答
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 没有任何特殊的正则表达式字符!

于 2012-04-14T19:57:19.830 回答