草庐IT

PHP+Mysql 在一行中显示多行的值

coder 2023-10-24 原文

你好,我总是在这里找到解决我的麻烦的方法,但这次我真的不知道如何搜索我需要的东西,然后我会在这里发布希望(但我确定)有人可以帮助我制作此查询有效。

我是 real rally(A richard Burns Rally Mod bla bla bla)的开发者。 我们现在需要一个自动化系统来显示每个锦标赛的最终排名。

我已经从 16 个查询中获取了所有必要的信息并将它们全部存储到一个临时数据库中。

这意味着我有每个冠军(蒙特卡洛、瑞典、墨西哥等) 临时表中有 15 个结果。 15 蒙特卡洛 15 代表瑞典 等等

然后我运行这个查询

SELECT Id, totale, num_prove, IdPilota, Nome, Cognome, Team, Nazionalita, Plate, Classe, VetturaUsata, Penalita, PaPenalty, PuntiCarriera, PuntiCarrieraP,
PuntiMon, PuntiSve, PuntiMes, PuntiArg, PuntiPor, PuntiIta, PuntiPol, PuntiFin, PuntiGer, PuntiCin, PuntiFra, PuntiSpa, PuntiGrb, PuntiAus, RallyCorso,
SUM(PuntiMon) + SUM(PuntiSve) + SUM(PuntiMes) + SUM(PuntiArg) + SUM(PuntiPor) + SUM(PuntiIta) + SUM(PuntiPol) + SUM(PuntiFin) + SUM(PuntiGer) + SUM(PuntiCin) + SUM(PuntiFra) + SUM(PuntiSpa) + SUM(PuntiGrb) + SUM(PuntiAus) AS Punti
FROM temp_table_5975a9e73a835
GROUP BY IdPilota
ORDER BY Punti DESC;

现在出了什么问题。 此查询有效,但我需要显示他在每个锦标赛中达到的每个 IdPilota 点。

atm the displayed data show 43 0 0 0 0 0 due to group  by IdPilota:

但我需要展示在每个冠军赛中获得的正确分数

有办法显示我需要的吗?

43 <- from (Montecarlo)
33 <- from (Sweden)
43 <- from (Mexico)
43 <- from (Argentina)
43 33 43 43

希望已经解释了我需要什么!!!

编辑: 这是工作查询 atm:

    SELECT Id, totale, num_prove, IdPilota, Nome, Cognome, Team, Nazionalita, Plate, Classe, VetturaUsata, Penalita, PaPenalty, PuntiCarriera, PuntiCarrieraP,
SUM(PuntiMon), SUM(PuntiSve), SUM(PuntiMes), SUM(PuntiArg), SUM(PuntiPor), SUM(PuntiIta), SUM(PuntiPol), SUM(PuntiFin), SUM(PuntiGer), SUM(PuntiCin), SUM(PuntiFra), SUM(PuntiSpa), SUM(PuntiGrb), SUM(PuntiAus), RallyCorso,
SUM(PuntiMon) + SUM(PuntiSve) + SUM(PuntiMes) + SUM(PuntiArg) + SUM(PuntiPor) + SUM(PuntiIta) + SUM(PuntiPol) + SUM(PuntiFin) + SUM(PuntiGer) + SUM(PuntiCin) + SUM(PuntiFra) + SUM(PuntiSpa) + SUM(PuntiGrb) + SUM(PuntiAus) AS Punti
FROM temp_table_5975a9e73a835
GROUP BY IdPilota
ORDER BY Punti DESC;

只是想知道这是否是显示我需要的数据的正确方法

最佳答案

我不知道您是否有特定的限制或限制,但我通常不会将业务逻辑与表示逻辑混合使用。在这种情况下,我宁愿不要创建临时表(也许 View 更好),因为您使用它是为了在表示层上显示表。 我假设我有这样的数据模型(我再说一遍:我不知道这是否是你的情况)

表“PILOTI”

+--------+-------------+
|  ID    | NOME        |
+--------+-------------+
|   1    | Colin McRea |
+--------+-------------+
|   2    | Carlos Sainz|
+--------+-------------+

表“GARE”

+--------+-------------+
|  ID    | NOME        |
+--------+-------------+
|   1    | Montecarlo  |
+--------+-------------+
|   2    | Argentina   |
+--------+-------------+
|   3    | Svezia      |
+--------+-------------+

TABLE "CAMPIONATO"(n-n => GARE 和 PILOTI 之间的关系表)

+--------+-------------+-------------+-------------+
|  ID    | ID_PILOTA   |  ID_GARA    | PUNTEGGIO   |
+--------+-------------+-------------+-------------+
|   1    |    1        |    1        |     43      |
+--------+-------------+-------------+-------------+
|   2    |    1        |    2        |     33      |
+--------+-------------+-------------+-------------+
|   3    |    2        |    1        |     15      |
+--------+-------------+-------------+-------------+
|   4    |    2        |    2        |     18      |
+--------+-------------+-------------+-------------+

通过这个查询,我检索每个车手,获得每个冠军的积分

SELECT P.NOME, G.NOME, C.PUNTEGGIO
FROM CAMPIONATO C
JOIN PILOTI P ON P.ID = C.ID_PILOTA
JOIN GARE   G ON G.ID = C.ID_GARA

您可以添加“WHERE”条件以过滤单个车手(或单个冠军)。 例如,如果您有 15 个车手,您只需添加 15 个查询就可以检索每个车手(每个冠军)达到的积分

WHERE P.ID = :id_pilota

到前面的查询。

您也可以使用此查询创建 View 并计算总分,但我更喜欢在 PHP 中而不是在 MySQL 中执行此操作。 IE。 (伪代码)

foreach($driver){
 queryToGetPoints();
 foreach($championship){
   $totalPoints+=$points;
 }
 printHtmlRow();
}

然而,使用 MySql 排序更简单

SELECT P.NOME,SUM(C.PUNTEGGIO) AS TOTALE
FROM CLASSIFICA C
JOIN  PILOTI P ON P.ID = C.ID_PILOTA
GROUP BY C.ID_PILOTA 
ORDER BY TOTALE ASC

为了更新积分,在锦标赛结束后,您可以在“CAMPIONATO”表中为每个车手插入一个新行,其中包含他自己的 ID、锦标赛 ID 和达到的积分。

即.

INSERT INTO CAMPIONATO (ID_PILOTA, ID_GARA, PUNTEGGIO) VALUES (1,3,18)

=> McRea 在 Svezia 得到 18 分

您还可以创建一个包含两个字段的“CLASSIFICA”表:ID_PILOTA 和 TOTALE 然后在“插入后”在“CAMPIONATO”表上创建一个触发器,以便使用旧值 + 新值的总和更新 CAMPIONATO.TOTALE 字段点插入。

因此,您可以看到不止一种方法可以满足您的需求。 我的建议是:如果多一个查询可以帮助您更简单地获取代码,即使存在计算开销(在本例中为嵌套循环中的多个查询)也请使用它。 希望这对你有帮助。 祝你好运!

关于PHP+Mysql 在一行中显示多行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45276574/

有关PHP+Mysql 在一行中显示多行的值的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  4. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  5. ruby-on-rails - 如何在 ruby​​ 交互式 shell 中有多行? - 2

    这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式ruby​​shell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f

  6. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  7. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  8. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  9. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  10. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

随机推荐