我对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
");
有没有办法将其用于一个查询?
答案 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没有任何特殊的正则表达式字符!