Alleen als er 1 dorp is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mebus  Hackintosh

Mebus Hackintosh

21/11/2009 09:59:00
Quote Anchor link
Ik speel het spelletje travian. Moet wat doen in mn vrije tijd. Ze geven je de gelegenheid om wereldkaarten te maken met gegevens die je van hun website kan halen.

http://help.travian.nl/index.php?type=faq&mod=230

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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`)
);


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
 
PHP hulp

PHP hulp

28/03/2024 12:47:21
 
Nicoow Unknown

Nicoow Unknown

21/11/2009 10:34:00
Quote Anchor link
uid is de user zijn ID?
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
 
Klaasjan Boven

Klaasjan Boven

21/11/2009 11:09:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)

Ik ga ervanuit dat elk dorp een rij in de tabel oplevert??

Nico een aggregate functie kun je nooit in een WHERE gebruiken.
 
Mebus  Hackintosh

Mebus Hackintosh

21/11/2009 11:24:00
Quote Anchor link
@Klaasjan,


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Klaasjan Boven

Klaasjan Boven

21/11/2009 11:31:00
Quote Anchor link
index op uid?
 
Mebus  Hackintosh

Mebus Hackintosh

21/11/2009 11:33:00
Quote Anchor link
Klaasjan Boven schreef op 21.11.2009 11:31:
index op uid?


Sorry? Weet niet wat je precies bedoeld.
 
Gerben G

Gerben G

21/11/2009 11:43:00
Quote Anchor link
Als je een index zet om het veld uid, zal de query waarschijnlijk veel sneller zijn.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.