可以简化mysql查询......还是需要一个函数,程序?

时间:2013-12-28 10:52:39

标签: python mysql web.py

我正在使用Python制作一个小程序,并将web.py作为Web端。对于该代码,我有一个SQL查询如下。需要进行查询以制作带有名称和标题的Web幻灯片,以便在该幻灯片中显示比例模型。所有铜牌都在一页上显示,所有银牌都将在一页上显示,所有金牌都会分开显示。 我现在已经知道,在浏览器中的下一个按钮的每个刻度线上,我将获得sql查询的下一个索引。假设sql查询中的索引0是:

Name    Surname    Title    Results    Class_ID    outcome
John    Doe        Test1     Bronze     1           John Doe with: Test1 Jane Doe with: Test1

sql查询中的索引1是:

Name    Surname    Title    Results    Class_ID    outcome
Jane    Doe        Test2     Silver     1           Jane Doe with: Test2 John Doe with: Test2

来自John和Jane的Model Test1获得铜牌,并与GROUP_CONCAT合并,以便在一个'line'上从该特定类中获得所有相同的结果。同样适用于银牌。所有金牌都要分开展示。我从第1级和铜牌开始,之后显示下一个指数并且是第1级的银牌,在金牌之后,我所拥有的31个级别的所有重复。

问题是: 以下查询可以简化吗?我现在所拥有的只是一个类的查询。总共有31个不同的类,因此查询应该在所有31个类上运行,以查看是否有奖牌,如果是,则查看铜牌,然后结束白银并分别显示金牌。我试图在MySQL中创建一个函数,但无法让它工作......

SELECT naw.Name, naw.Surname, model.Title, model.Results, model.Class_ID,
GROUP_CONCAT(naw.Name, ' ',naw.Surname, ' with: ', model.Title SEPARATOR ' ') AS outcome
FROM naw
LEFT OUTER JOIN model ON model.User_ID = naw.User_ID
WHERE model.Results = 'Bronze' AND Class_ID = '1'

UNION

SELECT naw.Name, naw.Surname, model.Title, model.Results, model.Class_ID,
GROUP_CONCAT(naw.Name, ' ',naw.Surname, ' with: ', model.Title SEPARATOR ' ') AS outcome
FROM naw
LEFT OUTER JOIN model ON model.User_ID = naw.User_ID
WHERE model.Results = 'Silver' AND Class_ID = '1'

UNION

SELECT naw.Name, naw.Surname, model.Title, model.Results, model.Class_ID, model.ID
FROM naw
LEFT OUTER JOIN model ON model.User_ID = naw.User_ID
WHERE model.Results = 'Gold' AND Class_ID = '1'

如果没有正确解释,请随时询问。我第一次在这里寻求帮助。

谢谢并亲切的问候,

更新 - 问题已解决

正在寻找完全错误的方向。以下是我的问题的解决方案。

SELECT naw.*, model.*, 
CASE
    WHEN Results = "Gold" THEN 4 + naw.User_ID
    WHEN Results = "Silver" THEN 2
    WHEN Results = "Bronze" THEN 3
    ELSE 4
END AS pageCategory,
GROUP_CONCAT(naw.Name, ' ',naw.Surname, ' with: ', model.Title SEPARATOR '<br>') AS        categories
FROM naw
INNER JOIN model ON model.User_ID = naw.User_ID
INNER JOIN classes ON model.Class_ID = classes.Class_ID
WHERE
Results <> 'None'
GROUP BY
pageCategory, classes.Class_ID
ORDER BY
classes.Class_ID, FIELD(Results, 'Bronze', 'Silver', 'Gold')

0 个答案:

没有答案