[mySQL] tabellen samenvoegen

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

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 06-05 10:14
Op mijn site heb ik momenteel een gastenboek en een soort weblogje. Nu wil ik, om onderhoud makkelijker te maken, de tabellen voor de reacties (nieuwscomments) en het gastenboek (gastenboek2)


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$query=mysql_query("SELECT * FROM nieuwscomments,gastenboek2 ORDER BY gastenboek2.date, nieuwscomments.date ASC") or die(mysql_error());   

    while ($r = mysql_fetch_array($query)) 
        { 
$id  = $r["id"]; 
 $nid  = $r["nid"]; 
$naam  = $r["naam"]; 
$bericht  = $r["bericht"]; 
$date  = $r["date"]; 
$tijd  = $r["tijd"]; 
$ip  = $r["ip"]; 
$antwoord  = $r["antwoord"]; 

echo"$id<br />\n";
$sql= "INSERT INTO reacties (id,nid,naam,bericht,date,tijd,ip,antwoord) VALUES ('','$nid','$naam','$bericht','$date','$tijd','$ip','$antwoord')"; 
mysql_query($sql) or die(mysql_error()); 

}
echo"done!";


Nu krijg ik 27018 rijen in 'reacties'. Dat zijn aantal rijen in gastenboek2 (114) * rijen in nieuwscomments (237). Geen toeval dus. Nu is dus de vraag hoe ik gewoon 114+237=351 rijen krijg. Wat doe ik fout, en hoe moet het wel?

  • newpegasus
  • Registratie: Juni 2003
  • Laatst online: 05-03 19:50

newpegasus

Hertog

op regel 1 doe je dit:

SELECT * FROM nieuwscomments,gastenboek2 ORDER BY gastenboek2.date, nieuwscomments.date ASC

nu worden dus alle records van de twee tabellen gelinkt met elkaar.

Kun je niet gewoon twee query's maken?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Omdat je geen 'join' criteria opgeeft krijg je een vermenigvuldiging van alle rijen in de beide tabellen (een carthesian product). Ik vermoed dat je in dit geval ook geen JOIN nodig hebt, maar een UNION.

SELECT * FROM Tabel1
UNION
SELECT * FROM Tabel2

dit geeft je 1 resultset met alle rijen uit beide tabellen.
Als het trouwens bedoeld is om alle reacties van de beide aparte tabellen in 1 nieuwe te krijgen kun j e beter iets als het volgende doen:

INSERT INTO reacties (id, nid, naam, ....)
SELECT id, nid, naam FROM nieuwscomments.

Dit voegt direct alle rijen uit de nieuwscomments tabel toe aan de nieuwe reacties tabel.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 06-05 10:14
newpegasus schreef op maandag 28 maart 2005 @ 20:30:
Kun je niet gewoon twee query's maken?
Ik wil eigenlijk ook dat de id's chronologisch zijn, dat is nu niet het geval. Lukt dat dan ook met twee query's?

[ Voor 30% gewijzigd door StephanVierkant op 28-03-2005 20:32 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Stephan4kant schreef op maandag 28 maart 2005 @ 20:32:
Ik wil eigenlijk ook dat de id's chronologisch zijn, dat is nu niet het geval. Lukt dat dan ook met twee query's?
Als je ID auto increment is, en je het gewoon uit je query weglaat: ja. Maar een union is een beter plan dan twee queries.

'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.


  • Rob
  • Registratie: Februari 2000
  • Niet online

Rob

Ik mis een 'where' in de query

In the beginning the Internet was a bunch of smart users with dumb terminals. Now...


  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 06-05 10:14
Met heel veel dank aan P_de_B:

PHP:
1
$query=mysql_query("SELECT * FROM gastenboek2 UNION SELECT * FROM nieuwscomments ORDER BY date") or die(mysql_error());


Werkt perfect :)
Pagina: 1