我有这样的查询:如何根据select语句中的值限制结果?
SELECT u.id, u.name, top_tags(u.id) as top_tags, cal_rep(u.id) rep
FROM users
ORDER BY rep
LIMIT :p,20;
top_tags()
是返回要么NULL
或用户的前三名标签的逗号分隔字符串的函数。另外cal_rep()
是另一个函数,它返回0
或声望数。所以上面的查询总是返回一个列表全部用户。事情是这样的:
+----+----------+-------------------------------+-----------+
| id | name | top_tags | rep |
+----+----------+-------------------------------+-----------+
| 1 | Jack | HTML,CSS,jQuery | 3244 |
| 2 | Peter | SQL-Server,MySQL,Database | 543 |
| 3 | Martin | NULL | 0 |
+----+----------+-------------------------------+-----------+
虽然我想省略谁拥有NULL
他们的top_tags
和0
声誉的用户。所以这是预期的结果:
+----+----------+-------------------------------+-----------+
| id | name | top_tags | rep |
+----+----------+-------------------------------+-----------+
| 1 | Jack | HTML,CSS,jQuery | 3244 |
| 2 | Peter | SQL-Server,MySQL,Database | 543 |
+----+----------+-------------------------------+-----------+
我该怎么做?
谢谢你......你认为你的第一个查询是最优的吗?既然你正在调用这个函数两次。在SELECT语句和WHERE子句中都是这样的。 –
根据你的基准测试,我想将函数的结果初始化为一个变量,并且在查询中使用该变量两次会更好。 –