Alleen als er 1 dorp is
http://help.travian.nl/index.php?type=faq&mod=230
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `x_world` (
`id` int(9) unsigned NOT NULL default '0',
`x` smallint(3) NOT NULL default '0',
`y` smallint(3) NOT NULL default '0',
`tid` tinyint(1) unsigned NOT NULL default '0',
`vid` int(9) unsigned NOT NULL default '0',
`village` varchar(20) NOT NULL default '',
`uid` int(9) NOT NULL default '0',
`player` varchar(20) NOT NULL default '',
`aid` int(9) unsigned NOT NULL default '0',
`alliance` varchar(8) NOT NULL default '',
`population` smallint(5) unsigned NOT NULL default '0',
UNIQUE KEY `id` (`id`)
);
`id` int(9) unsigned NOT NULL default '0',
`x` smallint(3) NOT NULL default '0',
`y` smallint(3) NOT NULL default '0',
`tid` tinyint(1) unsigned NOT NULL default '0',
`vid` int(9) unsigned NOT NULL default '0',
`village` varchar(20) NOT NULL default '',
`uid` int(9) NOT NULL default '0',
`player` varchar(20) NOT NULL default '',
`aid` int(9) unsigned NOT NULL default '0',
`alliance` varchar(8) NOT NULL default '',
`population` smallint(5) unsigned NOT NULL default '0',
UNIQUE KEY `id` (`id`)
);
Nu hebben sommige mensen dus meerdere dorpen. Wat ik wil is dat een SQL query alleen maar de records eruit haalt waarvan een speler maar 1 dorp heeft. Ik heb alleen geen flauw idee wat ik dan moet gebruiken. Dus enkele MySQL hints zijn welkom. Van de bovenste velden is het enigste veld dat uniek is is 'id'. uid kan meerdere keren voorkomen als een speler 2 of meer dorpen heeft dus waarschijnlijk moet ik het hier op uit filteren zeker?
Mebus
Dan zou het gewoon zijn:
SELECT * FROM x_world WHERE Count(uid) = 1
Pin me niet vast op het juiste gebruik van count,, maar dat mag je zelf uitzoeken
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT
uid,
veld1,
veld2,
veld3
FROM
table
WHERE
uid IN (SELECT uid FROM table GROUP BY uid HAVING COUNT(*) = 1)
uid,
veld1,
veld2,
veld3
FROM
table
WHERE
uid IN (SELECT uid FROM table GROUP BY uid HAVING COUNT(*) = 1)
Ik ga ervanuit dat elk dorp een rij in de tabel oplevert??
Nico een aggregate functie kun je nooit in een WHERE gebruiken.
Code (php)
1
SELECT uid, player FROM x_world WHERE uid IN (SELECT uid FROM x_world GROUP BY uid HAVING COUNT(*) = 1)
Pagina doet er zeer lang over om te laden.. Lijkt wel een oneindige loop.
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
index op uid?
Klaasjan Boven schreef op 21.11.2009 11:31:
index op uid?
Sorry? Weet niet wat je precies bedoeld.
Als je een index zet om het veld uid, zal de query waarschijnlijk veel sneller zijn.