Toon posts:

[MySQL]3.53 server beperkingen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Op de server waar mijn site draait hebben ze MySQL 3.53 draaien. Volgens mij kan ik daardoor niet de benodigde info uit de database halen met 1 query.
Misschien zit ik er naast...

Tables:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create table team(
team_id int not null auto_increment unique,
team_naam varchar(20) not null,
locatie varchar(20) not null,
divisie varchar(30) not null,
club varchar(30),
primary key (team_naam, divisie),
foreign key (divisie) references divisies(divisie));

create table wedstrijd(
home_team int not null,
guest_team int not null,
datum date not null,
score_home int(2),
score_guest int(2),
primary key (home_team, guest_team, datum),
foreign key (home_team) references team (team_id),
foreign key (guest_team) references team (team_id));


Nou wil ik een lijst per divisie ophalen wat de huidige standen zijn met de hoogste scores boven aan.
De moeilijkheid zit het in het optellen van de thuis gespeelde wedstrijden en de uit gespeelde wedstrijden.

Met de volgende query's kan ik ze afzonderlijk ophalen:
Total punten thuis wedstrijden:
code:
1
2
3
4
5
select t.team_naam, sum(w.score_home) as Points 
from 
team t, wedstrijd w 
where t.team_id=w.home_team and t.divisie='2e divisie oost'
group by t.team_naam order by Points

Total punten uit wedstrijden:
code:
1
2
3
4
5
select t.team_naam, sum(w.score_guest) as Points 
from 
team t, wedstrijd w 
where t.team_id=w.guest_team and t.divisie='2e divisie oost' 
group by t.team_naam order by Points desc


Is het nou mogelijk om de 2 query's in 1 te krijgen zonder UNION, VIEWS of subselect te gebruiken? Want MySQL 3.53 ondersteund dat niet....

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    t.team_naam,
    SUM(w.score_home) AS Points,
    SUM(w2.score_guest) AS Points2
FROM
    team t,
    wedstrijd w,
    wedstrijd w2
WHERE 
    t.team_id=w.home_team AND
    t.divisie='2e divisie oost' AND
    t.team_id=w2.guest_team
GROUP BY t.team_naam
ORDER BY Points, Points2 DESC

Zoiets?

[ Voor 7% gewijzigd door NMe op 17-05-2004 19:22 . Reden: foutje ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Zoiets had ik ook al geprobeerd maar de uistkomst is 4x te veel.
Ik denk ook dat MySQL voor elke keer dat t.team_id=w.home_team voorkomt de scores van alle t.team_id=w2.guest_team erbij telt.
Dus 2 thuis wedstrijden en 2 uit wedstrijden doet ie het volgende:

punten thuis 1 + punten uit 1+ punten uit 2 + punten thuis 2 +punten uit 1 + punten uit 2

oid...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 17 mei 2004 @ 18:59:
Zoiets had ik ook al geprobeerd maar de uistkomst is 4x te veel.
Zoiets? Of precies dat? Heb je het geprobeerd? :?
Verwijderd schreef op 17 mei 2004 @ 18:59:
Ik denk ook dat MySQL voor elke keer dat t.team_id=w.home_team voorkomt de scores van alle t.team_id=w2.guest_team erbij telt.
Dus 2 thuis wedstrijden en 2 uit wedstrijden doet ie het volgende:

punten thuis 1 + punten uit 1+ punten uit 2 + punten thuis 2 +punten uit 1 + punten uit 2

oid...
Lijkt me heel erg sterk, want die query klopt volgens mij toch echt...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Mijn test omgeving.

Gaius Poolers 2004-01-01 2 7
Gaius S&PCHengelo 2004-01-01 4 4
Poolers Gaius 2004-01-01 8 1
Poolers S&PCHengelo 2004-01-01 4 4
S&PCHengelo Gaius 2004-01-01 7 2
S&PCHengelo Poolers 2004-01-01 9 0


uitslag van jou query:

team_naam Points Points2
Gaius 12 6
Poolers 24 14
S&PCHengelo 32 16

Zoals je ziet klopt de score van 'Gaius' niet.
In mijn DB kom ik op 9 punten en niet 12

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 17 mei 2004 @ 19:48:
Mijn test omgeving.

Gaius Poolers 2004-01-01 2 7
Gaius S&PCHengelo 2004-01-01 4 4
Poolers Gaius 2004-01-01 8 1
Poolers S&PCHengelo 2004-01-01 4 4
S&PCHengelo Gaius 2004-01-01 7 2
S&PCHengelo Poolers 2004-01-01 9 0


uitslag van jou query:

team_naam Points Points2
Gaius 12 6
Poolers 24 14
S&PCHengelo 32 16

Zoals je ziet klopt de score van 'Gaius' niet.
Hmm, als je nou goed kijkt zie je dat je altijd 2x de waarde krijgt die je echt wil hebben. Tenzij je nog een andere query weet uit te dokteren kun je dit toch oplossen door in PHP, ASP of waar je dan ook in werkt gewoon het resultaat door 2 te delen? Toegegeven, het is een patchy oplossing, maar het werkt. :P
Verwijderd schreef op 17 mei 2004 @ 19:48:
In mijn DB kom ik op 9 punten en niet 12
6, niet 9. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
Ik heb de berekening niet helemaal gevolgd, maar als je er consequent twee keer zoveel uit punten uit krijgt kun je die ook in je query wel wegdelen. Je kunt gewoon iets als SELECT (SUM(Foo) + SUM(Bar))/2 ... schrijven.

Verwijderd

Topicstarter
In de test omgeving komt er idd 2 x de waarde uit. Maar in de 'echte' DB moet er bijv voor een team 84 uit komen maar met deze query is de uitkomst 322.

Ik vind het een hele moeilijke...

Ik heb de volgende 2 query's:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
//Haal alle plus punten op de gescoord zijn met thuis wedstrijden
select t.team_naam, sum(w.score_home) as Points 
from 
team t, wedstrijd w 
where t.team_id=w.home_team and t.divisie='2e divisie oost' 
group by t.team_naam order by Points

//Haal alle plus punten op de gescoord zijn met thuis uit wedstrijden
select t.team_naam, sum(w.score_guest) as Points 
from 
team t, wedstrijd w 
where t.team_id=w.guest_team and t.divisie='2e divisie oost' 
group by t.team_naam order by Points desc


en met php kan ik dan het totaal wel uitrekenen... :r niet netjes...maarja

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Probeer eens of je met meer records ook steeds 2x de waarde krijgt die je wil? Als dat zo is los je het op met mijn query in combinatie met wat Soultaker zegt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1