Php MySQL将字段结果乘以另一个字段的数目

Php MySQL将字段结果乘以另一个字段的数目,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我正在从数据库中选择各种列,我的查询如下所示: +---------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+------------+------+-----+---------+-------+ | userid | int(11) | YES | MUL | NULL | | |

我正在从数据库中选择各种列,我的查询如下所示:

+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| userid  | int(11)    | YES  | MUL | NULL    |       |
| storyid | int(11)    | NO   | MUL | NULL    |       |
| vote    | tinyint(4) | NO   |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
选择st.*,u.username创建者,将(不同的se.sentenceid)计数为句子,
合并(总和(v.vote),0)分,
GROUP_CONCAT(se.text按se.sentenceid分隔符“”排序)文本
来自故事街
连接句子se ON st.storyid=se.storyid
st.storyid=v.storyid上的左外连接投票
st.creatorid=u.userid上的左外部加入用户u
按st.storyid分组
限制30
此查询适用于除分数之外的所有内容。输出的分数是句子数乘以实际分数。我的
投票
表如下所示:

+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| userid  | int(11)    | YES  | MUL | NULL    |       |
| storyid | int(11)    | NO   | MUL | NULL    |       |
| vote    | tinyint(4) | NO   |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
vote
包含值1或-1


如何修改查询以获得实际分数

SELECT st.* , u.username creator, COUNT(DISTINCT se.sentenceid) AS sentences,
  COALESCE((SELECT SUM(v.vote)
            FROM votes v
            WHERE st.storyid = v.storyid), 0) score, 
  GROUP_CONCAT(se.text ORDER BY se.sentenceid SEPARATOR  ' ') text
FROM stories st
JOIN sentences se ON st.storyid = se.storyid
LEFT OUTER JOIN users u ON st.creatorid = u.userid
GROUP BY st.storyid
LIMIT 30

因为每个故事都可能有许多句子和许多投票,所以通过将所有可能的连接相乘得到一个笛卡尔积。

你能用一些示例数据创建一个SQLFIDLE吗?@xception-是的,我现在就开始…@xception-没关系,问题在我结束之前就得到了回答。不过,我将在下一个SQL问题中这样做。好的,请这样做,当我们知道哪些表之间有1-1连接,哪些表是1对多或多对多时,就更容易理解了。