Vysledky zavodu – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vysledky zavodu – MySQL – Fórum – Programujte.comVysledky zavodu – MySQL – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Cecilconrad
~ Anonymní uživatel
30 příspěvků
4. 1. 2012   #1
-
0
-

Mam databazi zavodu a v tabulce mam seznam jezdcu a jejich vysledku (pozici a vypocitam si kolik ziskali bodu), potrebuji z teto tabulky pro kazdeho jezdce vybrat 7 nejlepsich vysledku a ty secist a seradit

Povedlo se me udelat dotaz ktery tohle umi pro jednoho konkretniho jezdce

SELECT SUM(Points) AS Celkem FROM
(
SELECT
Calendar2011.ID AS Zavod,
IF(Position>0 AND Position<11,(SELECT Points FROM Points2011 WHERE ID=Position LIMIT 1)*(SELECT Coefficient FROM Calendar2011 WHERE ID=Zavod LIMIT 1),0) AS Points
FROM Zavod2011
INNER JOIN Calendar2011 ON Zavod2011.ZavodID=Calendar2011.ID
INNER JOIN Drivers ON Zavod2011.DriverID=Drivers.ID
WHERE Drivers.ID=54453 ORDER BY Points DESC LIMIT 7
) AS Jeden

kdyz se ale snazim z druhe tabulky kde mam seznam jezdcu spoustet tento prikaz pro kazde ID tak mam problem

SELECT ID AS SuperID,
(
SELECT SUM(Points) AS Celkem FROM
(
SELECT 
Calendar2011.ID AS Zavod,
IF(Position>0 AND Position<11,(SELECT Points FROM Points2011 WHERE ID=Position LIMIT 1)*(SELECT Coefficient FROM Calendar2011 WHERE ID=Zavod LIMIT 1),0) AS Points
FROM Zavod2011
INNER JOIN Calendar2011 ON Zavod2011.ZavodID=Calendar2011.ID
INNER JOIN Drivers ON Zavod2011.DriverID=Drivers.ID
WHERE Drivers.ID=SuperID ORDER BY Points DESC LIMIT 7
) AS top7
) AS Celkem
FROM Drivers ORDER BY Celkem DESC

#1054 - Unknown column 'SuperID' in 'where clause'

Jedine co me napada je udelat si tabulku prubeznych souctu, v PHP bych mel script ktery by ten muj dotaz spustil pro kazdeho jezdce, ale radeji bych to primo v sql.

Nahlásit jako SPAM
IP: 178.20.140.–
Reklama
Reklama
Jindra
~ Anonymní uživatel
17 příspěvků
6. 1. 2012   #2
-
0
-

Ve které tabulce je SuperID? Můžeš jsem dát strukturu těch tabulek (stačilo by ty, které jsou použité v dotazu)?

Nahlásit jako SPAM
IP: 93.99.193.–
Cecilconrad
~ Anonymní uživatel
30 příspěvků
6. 1. 2012   #3
-
0
-

Problem asi bude ze SuperID je pouze alias, zkousel jsem to i tak, ze jsem si ID jezdce ulozil do promene a vyhledaval podle ni, ale vracelo to same NULL zaznamy.

struktura:

CREATE TABLE `Calendar2011` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(100) NOT NULL,
  `Coefficient` float NOT NULL DEFAULT '1',
  PRIMARY KEY (`ID`)
);

CREATE TABLE `2011Points` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Points` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
);

CREATE TABLE `Zavod2011` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `DriverID` int(11) NOT NULL,
  `TeamID` int(11) DEFAULT NULL,
  `ZavodID` int(11) DEFAULT NULL,
  `Position` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`)
);

CREATE TABLE `Drivers` (
  `ID` int(11) NOT NULL,
  `Name` varchar(100) NOT NULL,
  PRIMARY KEY (`ID`)
);
Nahlásit jako SPAM
IP: 178.20.140.–
Jindra
~ Anonymní uživatel
17 příspěvků
6. 1. 2012   #4
-
0
-

A SuperID tedy je alias čeho? :-)

Nahlásit jako SPAM
IP: 93.99.193.–
Cecilconrad
~ Anonymní uživatel
30 příspěvků
6. 1. 2012   #5
-
0
-

ID kazdeho jezdce, kdyz to prepisu bez toho vnoreneho dotazu

SELECT ID AS SuperID, (vnoreny) AS Celkem FROM Drivers ORDER BY Celkem DESC;

a v tom vnorenem dotazu scitam tech 7 nejlepsich vysleku pro kazdeho jezdce, ty hledam podle SuperID

Nahlásit jako SPAM
IP: 178.20.140.–
Cecilconrad
~ Anonymní uživatel
30 příspěvků
6. 1. 2012   #6
-
0
-

Idea byla takovato

ten vnoreny dotaz ma jeste jeden vnoreny dotaz, ktery pro konkretniho jezdce vybere vsechny vysledky, tyto nadrazeny dotaz secte, scitat to scita spravne, kdyz misto SuperID zadam ID jednoho jezdce, jak to ale udelat aby se tam to ID stridalo pro vsechny jezdce z tabulky Drivers, tal abych to potom podle tohoto souctu mohl seradit nevim

SELECT SUM(Points) AS Celkem FROM
(
SELECT
Calendar2011.ID AS Zavod,
IF(Position>0 AND Position<11,(SELECT Points FROM Points2011 WHERE ID=Position LIMIT 1)*(SELECT Coefficient FROM Calendar2011 WHERE ID=Zavod LIMIT 1),0) AS Points
FROM Zavod2011
INNER JOIN Calendar2011 ON Zavod2011.ZavodID=Calendar2011.ID
INNER JOIN Drivers ON Zavod2011.DriverID=Drivers.ID
WHERE Drivers.ID=SuperID ORDER BY Points DESC LIMIT 7
) AS Jeden
Nahlásit jako SPAM
IP: 178.20.140.–
Jindra
~ Anonymní uživatel
17 příspěvků
6. 1. 2012   #7
-
0
-

#6 Cecilconrad
A když dáš místo 

WHERE Drivers.ID=SuperID

GROUP BY Drivers.ID

?

Nahlásit jako SPAM
IP: 93.99.193.–
Cecilconrad
~ Anonymní uživatel
30 příspěvků
6. 1. 2012   #8
-
0
-

To by mozna slo, kdybych to nemel takto, a takto to mam proto ze ten vnoreny dotaz vraci jen 7 nejlepsich vysledku, kterych tam muze byt az 11, potrebuji cecist ale jen tech 7

SELECT SUM(Points) AS Celkem FROM (vnoreny dotaz);

Mam dotaz, ktery funguje a scita vsechny vysledky pro kazdeho jezdce:

SELECT Drivers.Name,SUM(Points) AS Celkem FROM
(
SELECT 
ZavodID AS Zavod, 
DriverID AS Driver,
Position,
IF(Position>0 AND Position<11,(SELECT Points FROM Points2011 WHERE ID=Position LIMIT 1)*(SELECT Coefficient FROM Calendar2011 WHERE ID=Zavod LIMIT 1),0) AS Points 
FROM Zavod2011
) AS Body 
INNER JOIN Drivers ON Driver=Drivers.ID
GROUP BY Driver 
ORDER BY Celkem DESC
Nahlásit jako SPAM
IP: 178.20.140.–
Cecilconrad
~ Anonymní uživatel
30 příspěvků
11. 1. 2012   #9
-
0
-

Tak sem to nakonec vyresil pres to PHP, do tabulky Drivers jsem si udelal sloupecek TOP7 a po kazdem zavode to PHP skriptem prepocitam coz chvili sice trva, ale zato potom je uz vypis pekelne rychly, kdyz se nemusi nic pocitat. Aj kdybych to nakonec nejak vyresil v mysql tak by kazdy vypis musel znova pocitat a trvalo by to dlouho.

Nahlásit jako SPAM
IP: 178.20.140.–
Cecilconrad
~ Anonymní uživatel
30 příspěvků
11. 1. 2012   #10
-
0
-

jeste jedna moznost je vytvorit si SQL dotaz pomoci PHP a pro kazdeho jezdce vygenerovat SQL dotaz a pomoci UNION vsecky spojit, vznikne hodne dlouhy dotaz, ktery se docela dlouho provadi, ale slo by tak treba zpetne se podivat kdo vedl treba po druhem zavode, takovych dotazu ale nebude moc takze by se to dalo prezit, kdyz se nekdo raz za cas bude chtit zpetne podivat tak si chvili pocka

Nahlásit jako SPAM
IP: 178.20.140.–
Hrebo0
Duch
11. 1. 2012   #11
-
0
-

mna teraz napadlo ze by sa to dalo spravit cez pomocnu tabulku, alebo potom este tam vyuzit kurzor. :)

Nahlásit jako SPAM
IP: 217.31.39.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Vb kvíz výsledky — založil kuldaspunk

špatné výsledky — založil vasek.t

Formular s vysledky na mail — založil lalin

SQLite, kam ukládá výsledky ? — založil polonium

Průběžné výsledky přes AJAX — založil Nefaritus

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý