1

有一个 MYSQL 查找表,它返回在多个完成者 (N) 中某个位置 (P) 收到的分数,具有多种格式 (points_id)。不同的点结构用于不同的事件。有时得分取决于完成者的数量(N),有时则不然。这是表格的简短版本,有两个示例结构。points_id -1 点取决于 N Point_id -2 点不依赖。

积分

       points_id |   P   |   N   | points |
           1     |   1   |   3   |   90   |
           1     |   1   |   2   |   85   |
           1     |   1   |   1   |   80   |
           1     |   2   |   3   |   60   |
           1     |   2   |   2   |   50   |
           1     |   3   |   3   |   30   |
           3     |   1   |       |  100   |
           3     |   2   |       |   90   |
           3     |   3   |       |   80   |
           3     |   3   |       |   70   |

所以我的问题是:1)有没有办法将通配符放在表数据中。例如,如果显示空白的 N 列中有一个 % 并且我做了这个查询。

SELECT points from t1 WHERE points_id=3 and P=3 and N=2 

它会返回 96?PS我知道这不起作用,但显示了我的想法。

2)我希望它快,可以把它放在一个程序中以用于更大的查询。我猜除非有一种非常简单的方法来做我上面展示的事情。最快的方法是在 points_id =3 的情况下为所有不同的 N 设置行。真的吗?

4

2 回答 2

0

您可以考虑 UNION ALL:

SELECT points from t1 WHERE points_id=3 AND P=3
UNION ALL
SELECT points from t1 WHERE points_id=3 AND N=2 

无论 P=3 还是 N=2,这都会得到结果。我复制了你的数据库模式并尝试了这个,它产生了:

points
------
80
70

如果您确实希望它能够快速处理大量数据 - 您真的希望拥有一个索引和/或主键。

于 2012-04-30T15:23:14.860 回答
0

尝试这个 :

SELECT points from t1 WHERE points_id=3 and P=3 and (N=2 OR (IFNULL(N,'')='')) 
// dataType of N varchar
SELECT points from t1 WHERE points_id=3 and P=3 and (N=2 OR (IFNULL(N,0)=0))
//  dataType of N numeric type

让我知道是否有任何变化或误会您

于 2016-02-15T11:04:56.137 回答