【问题标题】:Is it possible to query for 3 things at once?是否可以一次查询 3 件事?
【发布时间】:2011-12-29 03:06:35
【问题描述】:

我正在向我的新页面添加 5 星投票系统。我有以下 4 个表:id、sid、rating、ipaddress。

我正在尝试做的(在我的查询中)是计算新闻条目的平均投票数,计算总票数 + 检查 IP 地址是否已经对该新闻项目投票。

这是我已经处理的平均票数/票数:

$result = mysql_query("SELECT AVG(rating) AS ave_rating, count(*) AS votes FROM news_ratings WHERE sid = $sid GROUP BY sid");
$obj = mysql_fetch_object($result);
$rating = $obj->ave_rating;
$votes = $obj->votes;

是否可以修改为也检查“ipaddress”表以查看是否匹配?

【问题讨论】:

  • 这与php无关;严格来说,这是一个关于所涉及的 SQL 的问题。您可能想要编辑您的问题并删除与 SQL 本身无关的无关信息;它会让它更清楚,从而提高您获得快速答案的机会。

标签: php mysql


【解决方案1】:

我认为您的意思是您有 4 个,而不是表格...

您只需要在WHERE 子句中添加一个逻辑AND

SELECT 
  AVG(rating) AS ave_rating,
  count(*) AS votes 
FROM news_ratings
WHERE
  sid = $sid
  AND ipaddress = '$ipaddress'
GROUP BY sid

更新

在 cmets 之后,要返回具有相同查询的 IP 匹配项,您可以使用 CASE 语句在您的 SELECT 列表中创建一个名为 ipmatch 的列:

SELECT 
  AVG(rating) AS ave_rating,
  count(*) AS votes, 
  CASE WHEN ipaddress = '$ipaddress' THEN 'IP-MATCH' ELSE 'IP-NOMATCH' END AS ipmatch
FROM news_ratings
WHERE
  sid = $sid
GROUP BY sid

【讨论】:

  • 对不起,我的意思是列。你的例子的问题是 - 如果没有 ip 地址匹配,它返回 0 行。我仍然希望获得平均评分/票数信息。我希望我仍然可以获取该信息 + 在一个查询中执行所有 IP 地址检查.. 也许这是不可能的?
  • @Dave 太好了,很乐意提供帮助。如果您满意,请单击复选标记将答案标记为已接受,欢迎来到 Stack Overflow。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 2022-12-17
  • 2012-09-24
相关资源
最近更新 更多