我有一个关于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
");有没有办法将其整合到一个查询中?
发布于 2012-04-15 03:50:33
您应该阅读一些关于数据库规范化的内容。第一个规范化规则是:字段必须是原子的。在您的例子中:不要将多个引用/日期保存到一个用逗号分隔的字段中。
发布于 2012-04-15 03:57:20
我同意规范化的答案,但是如果你坚持..听起来你需要一个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没有任何特殊的正则表达式字符!
https://stackoverflow.com/questions/10156740
复制相似问题