PDA

Bekijk Volledige Versie : Mysql Join probleem



Evert
02/06/03, 01:50
Hallo,

Ik heb het volgende probleem, en ik kan er niet uit komen

Ik heb een tabel met de uitslagen van boter kaas en eieren, die ziet er zo
uit

mysql> describe tictactoe;
+--------+--------------+------+-----+---------------------+----------------
+
| Field | Type | Null | Key | Default | Extra
|
+--------+--------------+------+-----+---------------------+----------------
+
| id | int(11) | | PRI | NULL | auto_increment
|
| time | datetime | YES | | 0000-00-00 00:00:00 |
|
| name | varchar(100) | YES | | |
|
| ai | varchar(100) | YES | | |
|
| winner | int(11) | | | 0 |
|
+--------+--------------+------+-----+---------------------+----------------
+
5 rows in set (0.00 sec)

(misschien moet je je font ff anders instellen voor een goede weergave)

Als Winner 1 is, dan heeft de speler gewonnen,
als Winner 2 is, dan heeft de computer gewonnen,
en als Winner 3 is dan was het gelijkspel

Nu wil ik een andere tabel genereren, met de volgende kolommen: De naam van
de speler (name), aantal keren verloren, aantal keren gewonnen, aantal keren
gelijkspel.

Een group by name dus

Hoe doe ik dit? Want een count telt alle rijen, en dat moeten we niet
hebben.

Groeten,
Evert

Rick
02/06/03, 21:20
"Evert" <evert@isflex.nl> schreef in bericht
news:j9wCa.321543$me2.37540113@amsnews02.chello.co m...
> Hallo,
>
> Ik heb het volgende probleem, en ik kan er niet uit komen
>
> Ik heb een tabel met de uitslagen van boter kaas en eieren, die ziet er zo
> uit
>
> mysql> describe tictactoe;
>
+--------+--------------+------+-----+---------------------+----------------
> +
> | Field | Type | Null | Key | Default | Extra
> |
>
+--------+--------------+------+-----+---------------------+----------------
> +
> | id | int(11) | | PRI | NULL |
auto_increment
> |
> | time | datetime | YES | | 0000-00-00 00:00:00 |
> |
> | name | varchar(100) | YES | | |
> |
> | ai | varchar(100) | YES | | |
> |
> | winner | int(11) | | | 0 |
> |
>
+--------+--------------+------+-----+---------------------+----------------
> +
> 5 rows in set (0.00 sec)
>
> (misschien moet je je font ff anders instellen voor een goede weergave)
>
> Als Winner 1 is, dan heeft de speler gewonnen,
> als Winner 2 is, dan heeft de computer gewonnen,
> en als Winner 3 is dan was het gelijkspel
>
> Nu wil ik een andere tabel genereren, met de volgende kolommen: De naam
van
> de speler (name), aantal keren verloren, aantal keren gewonnen, aantal
keren
> gelijkspel.
>
> Een group by name dus
>
> Hoe doe ik dit? Want een count telt alle rijen, en dat moeten we niet
> hebben.
>
> Groeten,
> Evert
>
>

Door middel van een SUM van het aantal overwinningen en een join op name dan
(let wel op dat het veld waarop je joined ook een varchar (100) is.
--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

Evert
02/06/03, 22:35
"Rick" <spammans@chello.nl> schreef in bericht
news:bbg7h5$1v1k$1@nl-news.euro.net...
>
>
> Door middel van een SUM van het aantal overwinningen en een join op name
dan
> (let wel op dat het veld waarop je joined ook een varchar (100) is.
> --
> Slechte webdesigners? Geef ze hier aan:
> http://webdesignert.vectoris.nl/
>

Zou je misschien iets duidelijker willen zijn? Het lukt me nog wel als ik
alleen een kolom wil met overwinningen, als ik ook die van verliezen en
gelijkspel wil doen, telt SUM gewoon alles op.

Groeten,
Evert

Rick
03/06/03, 08:50
"Evert" <evert@isflex.nl> schreef in bericht
news:iuOCa.335947$me2.38970323@amsnews02.chello.co m...
>
> "Rick" <spammans@chello.nl> schreef in bericht
> news:bbg7h5$1v1k$1@nl-news.euro.net...
> >
> >
> > Door middel van een SUM van het aantal overwinningen en een join op name
> dan
> > (let wel op dat het veld waarop je joined ook een varchar (100) is.
> > --
> > Slechte webdesigners? Geef ze hier aan:
> > http://webdesignert.vectoris.nl/
> >
>
> Zou je misschien iets duidelijker willen zijn? Het lukt me nog wel als ik
> alleen een kolom wil met overwinningen, als ik ook die van verliezen en
> gelijkspel wil doen, telt SUM gewoon alles op.
>
> Groeten,
> Evert
>
Even uit mijn hoofd dus er zal wel een fout inzitten:

SELECT tictactoe.name, overwinning.name, SUM(overwinning.winnen) as gewonnen
FROM tictactoe, overwinning WHERE tictactoe.name = overwinning.name

Ik ga er overigens vanuit dat er bij een gewonnen partij een 1 staat bij
"winnen" ;)
--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

Evert
03/06/03, 16:35
Hallo,

Bedankt voor je reactie, maar dit is niet helemaal wat ik wil.
Het probleem is dat er maar 1 tabel is (tictactoe) en daar daar is dus 1
kolom (winner) die 1, 2 of 3 kan bevatten.
De tabel die ik wil genereren met een SELECT statement moet de volgende
kolommen hebben:

Naam, Overwinningen, Verliezen, Gelijkspel

Dan wordt het dus een probleem. Volgens mij moet er nu namelijk minstens 3x
de tictactoe tabel worden gebruikt bijvoorbeeld: FROM tictactoe as t1,
tictactoe as t2, tictactoe as t3 en dat krijg ik dus niet goed voorelkaar
omdat SUM alle waarden wil optellen. Misschien dat het lukt met sub-queries,
maar ik weet ook niet of MySQL dat ondersteunt.

Bij voorbaat dank ;),
Evert

"Rick" <spammans@chello.nl> schreef in bericht
news:bbhfs7$2g64$1@nl-news.euro.net...
>
> Even uit mijn hoofd dus er zal wel een fout inzitten:
>
> SELECT tictactoe.name, overwinning.name, SUM(overwinning.winnen) as
gewonnen
> FROM tictactoe, overwinning WHERE tictactoe.name = overwinning.name
>
> Ik ga er overigens vanuit dat er bij een gewonnen partij een 1 staat bij
> "winnen" ;)
> --
> Slechte webdesigners? Geef ze hier aan:
> http://webdesignert.vectoris.nl/
>
>

Rick
03/06/03, 16:35
"Evert" <evert@isflex.nl> schreef in bericht
news:8b2Da.351376$me2.40171318@amsnews02.chello.co m...
Misschien dat het lukt met sub-queries,
> maar ik weet ook niet of MySQL dat ondersteunt.
>
> Bij voorbaat dank ;),
> Evert

Subqueries kunnenn bij mijn weten alleen mysql 4.x, dus ja het zou mogelijk
kunnen zijn, mits je dan mysql 4.x gebruikt.
--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

Rick
03/06/03, 16:50
"Evert" <evert@isflex.nl> schreef in bericht
news:8b2Da.351376$me2.40171318@amsnews02.chello.co m...
> Hallo,
>
> Bedankt voor je reactie, maar dit is niet helemaal wat ik wil.
> Het probleem is dat er maar 1 tabel is (tictactoe) en daar daar is dus 1
> kolom (winner) die 1, 2 of 3 kan bevatten.
> De tabel die ik wil genereren met een SELECT statement moet de volgende
> kolommen hebben:
>
> Naam, Overwinningen, Verliezen, Gelijkspel
>
Overigens waarom gebruik je niet meerdere queries hiervoor (3 om precies te
zijn ;)) dus eentje voor winst, eentje voor verlies en eentje voor
gelijkspel?


--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

Evert
03/06/03, 17:05
Ja, dat kan natuurlijk ook, maar dat is ook gelijk een stuk meer werk met
PHP ;) Een mooiere oplossing leek mij met een enkele SQL query, maar alst
niet anders is, dan ist niet anders ;) I.i.g, bedankt voor de moeite

Groeten,
Evert

"Rick" <spammans@chello.nl> schreef in bericht
news:bbibn9$2ssg$1@nl-news.euro.net...
> Overigens waarom gebruik je niet meerdere queries hiervoor (3 om precies
te
> zijn ;)) dus eentje voor winst, eentje voor verlies en eentje voor
> gelijkspel?
>
>
> --
> Slechte webdesigners? Geef ze hier aan:
> http://webdesignert.vectoris.nl/
>
>

Rick
03/06/03, 17:20
"Evert" <evert@isflex.nl> schreef in bericht
news:3H2Da.351744$me2.40226410@amsnews02.chello.co m...
> Ja, dat kan natuurlijk ook, maar dat is ook gelijk een stuk meer werk met
> PHP ;) Een mooiere oplossing leek mij met een enkele SQL query, maar alst
> niet anders is, dan ist niet anders ;) I.i.g, bedankt voor de moeite
>
> Groeten,
> Evert
>
Ik denk dat je qua snelheid misschien nog wel winst pakt. Uiteraard is het
wat meer progwerk, maar ik denk dat je database je een stuk aardiger vindt
:). In principe zorgt een join meestal voor tijdsverlies of een hogere
parsetime in het algemeen :).

--
Slechte webdesigners? Geef ze hier aan:
http://webdesignert.vectoris.nl/

henq
06/06/03, 22:50
experimenteer eens met zoiets:

SELECT
name,
count(IF(winner=1,1,NULL)) AS 'gewonnen',
count(IF(winner=2,1,NULL)) AS 'verloren',
count(IF(winner=3,1,NULL)) AS 'gelijk',
FROM tictactoe
GROUP BY name


pingpong het resultaat, ik kan het zonder tabel hier niet testen.
of post anders een deel van de tabel als dump (create tabel plus inserts)


~h



"Evert" <evert@isflex.nl> schreef in bericht
news:j9wCa.321543$me2.37540113@amsnews02.chello.co m...
> Hallo,
>
> Ik heb het volgende probleem, en ik kan er niet uit komen
>
> Ik heb een tabel met de uitslagen van boter kaas en eieren, die ziet er zo
> uit
>
> mysql> describe tictactoe;
>
+--------+--------------+------+-----+---------------------+----------------
> +
> | Field | Type | Null | Key | Default | Extra
> |
>
+--------+--------------+------+-----+---------------------+----------------
> +
> | id | int(11) | | PRI | NULL |
auto_increment
> |
> | time | datetime | YES | | 0000-00-00 00:00:00 |
> |
> | name | varchar(100) | YES | | |
> |
> | ai | varchar(100) | YES | | |
> |
> | winner | int(11) | | | 0 |
> |
>
+--------+--------------+------+-----+---------------------+----------------
> +
> 5 rows in set (0.00 sec)
>
> (misschien moet je je font ff anders instellen voor een goede weergave)
>
> Als Winner 1 is, dan heeft de speler gewonnen,
> als Winner 2 is, dan heeft de computer gewonnen,
> en als Winner 3 is dan was het gelijkspel
>
> Nu wil ik een andere tabel genereren, met de volgende kolommen: De naam
van
> de speler (name), aantal keren verloren, aantal keren gewonnen, aantal
keren
> gelijkspel.
>
> Een group by name dus
>
> Hoe doe ik dit? Want een count telt alle rijen, en dat moeten we niet
> hebben.
>
> Groeten,
> Evert
>
>

Evert
07/06/03, 14:35
"henq >" <henq _ replace 0 by o <hvtijen@h0tmail.c0m> :
> experimenteer eens met zoiets:
>
> SELECT
> name,
> count(IF(winner=1,1,NULL)) AS 'gewonnen',
> count(IF(winner=2,1,NULL)) AS 'verloren',
> count(IF(winner=3,1,NULL)) AS 'gelijk',
> FROM tictactoe
> GROUP BY name
>
>

Perfect! Precies wat is moest hebben :) Je hebt iemand blij gemaakt!

Groeten,
Evert