Toon posts:

[SQL] Cartesiaans product*

Pagina: 1
Acties:
  • 372 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben voor een home-made forum een search aan het maken:
PHP:
1
<?$getmember = $db->query("SELECT t.titel, t.gepostop, p.tid FROM topics t, posts p WHERE t.auteurID = '$getid' AND p.auteurID = '$getid'");                    while($postrij = $db->fetchr($getmember)){                    echo $postrij['titel'] . $postrij['tid']  ."<br>";                    }?>

ik krijg dat als resultaten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Test8
Blaat8
a8
Test8
Blaat8
a8
Test8
Blaat8
a8
Test8
Blaat8
a8
Test8
Blaat8
a8
Test9
Blaat9
a9
Test10
Blaat10
a10

De nummers zijn de topic id's en de teksten ervoor zijn de topic titels.
nu hoort bij test 8, bij blaat 9 en bij a 10.
Heel gek, iemand een idee

  • whoami
  • Registratie: December 2000
  • Laatst online: 03-09 22:56
Niets gek aan.
Je Where clause klopt niet, je zorgt voor een cartesiaans product. Vandaar dat je de resultaten ook meerdere keren krijgt.

Dat SQL statement gaat nl. voor alle records uit tabel1 alle records uit tabel2 gaan ophalen.

Je krijgt dus tabel1 x tabel2 aantal records.

Pas je WHERE clausule dus aan.

Edit: dit heeft dus niets met PHP te maken, en ook niets met loopjes.

https://fgheysels.github.io/


Verwijderd

Topicstarter
HMmm kan je me dan vertellen HOE ik me WHERE clausesule moet aanpassen. Het zegt me allemaal namelijk niets

  • whoami
  • Registratie: December 2000
  • Laatst online: 03-09 22:56
Neen, hij zegt je niets, idd.

Maar als je een boek of tutorial van SQL hebt, kun je het daar wel in vinden.
Kijk eens bij joins. Je selecteert nl. gegevens uit 2 tabellen en je joint ze niet, daar zit de clue.

https://fgheysels.github.io/


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Je moet ergens een "=" vergelijking maken, bijv:

t.tid = P.tid

Dan krijg je dus geen dubbele als het goed is.