grote sql
Ik heb zonet een sql lijntje aangepast. het viel me op dat deze nogal groot begon te worden.(voor mij dan toch :))
met 36 lijnen is die toch al groot hoewel niet mijn grootste.
Wat is bij jullie zowat de grootste sql?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
SELECT
uitslag,
p.opmerking,
DATE_FORMAT(datum, "%d/%m/%Y"),
s1.naam ,
s2.naam ,
s1.id,
s2.id,
COALESCE(p.uitsteller, "")as uitsteller
FROM trn_partijen p
join trn_spelers s1
on s1.id=speler1
join trn_spelers s2
on s2.id=speler2
WHERE
p.id_toernooi=8 and
uitslag not in(".") and
datum>=(
select
max(datum)
from trn_partijen
where
id_toernooi=8 and datum=(
select
max(datum)
from
trn_partijen
where
id_toernooi=8
and (weekday(datum) =
(SELECT (speeldag-1) FROM trn_toernooien WHERE id = 8) )))
order by
datum,
s1.naam,
s2.naam
uitslag,
p.opmerking,
DATE_FORMAT(datum, "%d/%m/%Y"),
s1.naam ,
s2.naam ,
s1.id,
s2.id,
COALESCE(p.uitsteller, "")as uitsteller
FROM trn_partijen p
join trn_spelers s1
on s1.id=speler1
join trn_spelers s2
on s2.id=speler2
WHERE
p.id_toernooi=8 and
uitslag not in(".") and
datum>=(
select
max(datum)
from trn_partijen
where
id_toernooi=8 and datum=(
select
max(datum)
from
trn_partijen
where
id_toernooi=8
and (weekday(datum) =
(SELECT (speeldag-1) FROM trn_toernooien WHERE id = 8) )))
order by
datum,
s1.naam,
s2.naam
Deze query is oorspronkelijk wel met hulp van sommigen van jullie in elkaar gebokst waarvoor nog steeds mijn dank.
Deze haalt alle partijen op welke gespeeld zijn sinds de laatste officiële speeldag, dus ook deze welke op uitzonderings dagen gespeeld zijn.
Jan
Gewijzigd op 14/03/2016 19:17:38 door Jan R
Niemand :(
En ik heb zelf gemerkt dat je een hoop door de database kan oplossen, dat is vele malen sneller dan bepaalde dingen in PHP op te lossen.
Dus grote queries zijn niet zo erg :-)
Simpelweg omdat iets lang(er) is, wil dat niet zeggen dat het krachtiger is en/of veel (meer) werk verzet.
Daarnaast is het aantal regels niet zo'n goede maatstaf, daar je een query, uit oogpunt van leesbaarheid, over meerdere regels kunt verdelen.
Evenmin is het aantal karakters een goede maatstaf, want je kunt alle op te vragen kolommen uitschrijven in plaats van simpelweg SELECT *, en ook kun je aliassen hele lange namen geven. Terwijl de query effectief niets extra's doet.
In den beginne van het computertijdperk werden naar verluid ontwikkelaars betaald per K-LOC (1000 regels aan code). Ik hoef je waarschijnlijk niet uit te leggen wat voor gedrochten van programma's dat soms opleverde.
De kunst lijkt mij juist alles zo simpel (en kort) mogelijk te maken, maar niet simpeler (of korter). Tevens moet code ideaal gesproken zichzelf uitleggen en er zinnig uitzien. En zo zijn er nog meer aspecten die je hiermee zult moeten balanceren (leesbaarheid, onderhoudbaarheid, veiligheid, performance et cetera). Dit zal altijd een tradeoff zijn.
Lengte of aantal regels lijken mij echter geen zinnig criterium.
Of zoals iemand anders mij ooit zei: je moet niet tellen, maar wegen.
Gewijzigd op 16/03/2016 14:57:29 door Thomas van den Heuvel