私はこのようなクエリがある: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
またはユーザーの上位3つのタグのカンマで区切られた文字列のいずれかを返す関数です。また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 |
+----+----------+-------------------------------+-----------+
私は彼らのtop_tags
と0
評判としてNULL
を持つユーザーを省略したいものの。したがって、これは期待される結果です。
+----+----------+-------------------------------+-----------+
| id | name | top_tags | rep |
+----+----------+-------------------------------+-----------+
| 1 | Jack | HTML,CSS,jQuery | 3244 |
| 2 | Peter | SQL-Server,MySQL,Database | 543 |
+----+----------+-------------------------------+-----------+
どうすればいいですか?
ありがとうございます...あなたの最初のクエリは最適だと思いますか?関数を2回呼び出すので両方とも 'SELECT'ステートメントと' WHERE'節で。 –
ベンチマークに基づいて、関数の結果を変数に初期化し、その変数をクエリで2回使用する方が良いでしょう。 –