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对多或多对多时,就更容易理解了。