Autor Zpráva
Kcko
Profil
Potrebuji zjistit veskere informace o nejnovejsim zapase konkretniho hrace.
Obdobny poddotaz kterym by to slo jsem zvyraznil tucne, jenze ... ten mi vybere pouze 1 hodnotu, ja potrebuji veskere hodnoty z konkretniho radku, kdyz ho pouziji takhle tak se subselect chova jako SLOUPEC a tudiz mohu ziskat pouze 1 hodnotu.


Jak aplikovat dotaz tak abych pote mohl operovat se vsemi dostupnymi udaji...

Pro vyber nejnovejsiho zapasu bych pouzil neco jako

(SELECT * FROM vysledky WHERE YEAR(datum) = $year AND id_hrace = $user ORDER BY datum DESC LIMIT 1)


DIKY

$sql = 	
	"        INSERT INTO grt (
								id_hrac, 
								koeficient, 
								rok, 
								posledni_body, 
								poradi, 
								pz, 
								v, 
								r,
								p,
								gf,
								ga,
								trest,
								kontumace_win,
								kontumace_lose,
								last_match_date
								)    

			  SELECT 
			  hrac, 	
			  SUM(KOEFICIENT) + 1000 AS KOEFICIENT,
			  $year,
			  $last_pts,
			  0,
			  SUM(PZ) AS PZ,
			  SUM(WIN) + SUM(KONTUMACE_1) AS WIN, 
              SUM(DRAW) AS DRAW, 
              SUM(LOSE) + SUM(KONTUMACE_2) +  SUM(KONTUMACE_3)  AS LOSE,			  
              SUM(g1)  AS G1,
              SUM(g2) +  (SUM(KONTUMACE_2) +  SUM(KONTUMACE_3)) * 3  AS G2,
			  (SELECT IFNULL(SUM(pts), 0) FROM zvlastni_body WHERE YEAR(datum) = $year AND id_hrace = $user)	AS TREST,
			  SUM(KONTUMACE_1) as KONTUMACE_WIN,
			  SUM(KONTUMACE_2) +  SUM(KONTUMACE_3) as KONTUMACE_LOSE,
			  ( SELECT GREATEST(posledni_zapas_liga_cas, posledni_zapas_ladder_cas )  FROM hraci WHERE id = $user)	AS LAST_MATCH_DATE
			  
      FROM
      
      (  
              /* hrac id*/
              SELECT d_hrac as hrac,
              1 as PZ,
              koeficient1 as KOEFICIENT,
			  
			  /* normalni goly */
			  d_goly as g1, 
			  h_goly as g2,
             
			  /* vyhra */
			  CASE WHEN d_goly > h_goly AND kontumace = 0
              THEN 1 
              ELSE 0 
              END AS WIN, 
             
			  /* remiza */
              CASE WHEN d_goly = h_goly AND kontumace = 0
              THEN 1 
              ELSE 0 
              END AS DRAW, 
              
			  /* prohra */
			  CASE WHEN d_goly < h_goly AND kontumace = 0
              THEN 1 
              ELSE 0 
              END AS LOSE, 
              
              /* vitezna kontumace */
			  CASE WHEN kontumace = 1
              THEN 1 
              ELSE 0 
              END AS KONTUMACE_1, 
              

              /* prohra kontumace */
			  CASE WHEN kontumace = 2 
              THEN 1 
              ELSE 0 
              END AS KONTUMACE_2, 

              
			  /* prohra kontumace , oba*/
			  CASE WHEN kontumace = 3 
              THEN 1 
              ELSE 0 
              END AS KONTUMACE_3
             
             
             
			FROM vysledky
			WHERE schvaleno = 2  
			AND d_hrac = $user 
			AND YEAR(datum) = $year
		
       
            
            UNION ALL
            
              /* hrac id*/
              SELECT h_hrac as hrac,
              1 as PZ,
              koeficient2 as KOEFICIENT,
			  
			  /* normalni goly */
			  h_goly as g1, 
			  d_goly  as g2,
             
			  /* vyhra */
			  CASE WHEN d_goly < h_goly AND kontumace = 0
              THEN 1 
              ELSE 0 
              END AS WIN, 
             
			  /* remiza */
              CASE WHEN d_goly = h_goly AND kontumace = 0
              THEN 1 
              ELSE 0 
              END AS DRAW, 
              
			  /* prohra */
			  CASE WHEN d_goly > h_goly AND kontumace = 0
              THEN 1 
              ELSE 0 
              END AS LOSE, 
              
              /* vitezna kontumace */
			  CASE WHEN kontumace = 2
              THEN 1 
              ELSE 0 
              END AS KONTUMACE_1, 
              

              /* prohra kontumace */
			  CASE WHEN kontumace = 1 
              THEN 1 
              ELSE 0 
              END AS KONTUMACE_2, 

              
			  /* prohra kontumace , oba*/
			  CASE WHEN kontumace = 3 
              THEN 1 
              ELSE 0 
              END AS KONTUMACE_3
             
 
			FROM vysledky
			WHERE schvaleno = 2  
			AND h_hrac = $user 
			AND YEAR(datum) = $year
        ) 
         as tmp
         JOIN hraci ON tmp.hrac = hraci.id 
         GROUP BY hrac

Kajman_
Profil *
Nestačí použít něco na způsob "Nalezení řádků s maximální (minimální) hodnotou" z FAQ?
Kcko
Profil
No to prave nestaci , rad bych k tomu pripojil informace o nejvyssim hranem zapase toho konkretniho hrace

kdybych potreboval napriklad DATUM, ID, a SOUPERE musel bych aplikovat 3 dotazy typu


(SELECT id FROM vysledky WHERE YEAR(datum) = $year AND id_hrace = $user ORDER BY datum DESC LIMIT 1) as maxIDmatch,
(SELECT datum FROM vysledky WHERE YEAR(datum) = $year AND id_hrace = $user ORDER BY datum DESC LIMIT 1) as datum,
(SELECT id FROM host WHERE YEAR(datum) = $year AND id_hrace = $user ORDER BY datum DESC LIMIT 1) as souper


Ale toto se mi nelibi. Lze to tedy nejak ?
Kajman_
Profil *
Připojíš výsledek dotazu z faq jako jinou tabulku do sekce from.
Kcko
Profil
Jedna se o toto?


-- pro každou kategorii najdi všechny řádky, kde je nejvyšší cena pro danou kategorii
select t1.* from tabulka t1, (select t2.kategorie, max(t2.cena) cena from tabulka t2 group by t2.kategorie) t3
where t1.kategorie=t3.kategorie and t1.cena=t3.cena;



Predpokladam ze budu spojovat pomoci hracova ID, co by se stalo ovsem kdyby nahodou hrac nemel ani 1 zapas, lze to osetrit?
Kcko
Profil
Tak mi to funguje, a to co jsem napsal ohledne osetreni je asi blbost, protoze kdyz hrac nebude mit v DB zadny zapas tak ho to vubec nenajde tudiz odpada nejaky LEFT JOIN na posledni jeho zapas :-)

Diky!
Toto téma je uzamčeno. Odpověď nelze zaslat.

0