[MySQL]Query haalt teveel records op

Pagina: 1
Acties:

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Ik heb een klein probleempje met een MySQL query. Ik heb de volgende tabel structuur

users
ID|vnaam|merk|type

merken
ID|Merknaam

typen
ID|Typenaam

Ik heb nu de volgende query gebakken
PHP:
1
2
3
4
5
6
7
8
9
<?
$get_latest = mysql_query("select a.*, b.Merknaam, c.Typenaam from users a, 
merken b, typen c where a.merk = b.ID and b.ID = c.Merk_ID order by a.ID desc limit 10",$db);
while ($l = mysql_fetch_array($get_latest))
  {
$date = date("d/m",$l[reg]);
echo "$date - <a href=scoot.php?ID=$l[ID]>$l[Merknaam] $l[Typenaam] ($l[vnaam])</a><br>";
  }
?>

De bedoeling is dus dat hij een lijstje van de laatste 10 users weergeeft met daarachter de Merk en Typenaam uit de andere gekoppelde tabellen.

Het probleem is dat hij niet de user array afloopt, maar ook de merken en typen array. Dus als er maar 1 record staat in de user tabel en ik run dit script, krijg je een ellenlange lijst. De hele tijd dezelfde username met daarachter verschillende Merk en typenamen

Ik hoop dat het probleem een beetje duidelijk is

Verwijderd

Moet je vij je limit niet een range opgeven?? Bijvoorbeeld van 0 tot 10 --> 'limit 0,10'
Mischien dat het daar aan kan liggen?

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Dat heeft te maken met de manier waarop je je gegeeven van de 2 tabellen koppelt. Probeer eens met een inner join te werken.

Meer over joins kan je ongetwijfeld wel vinden in de search ;) Daar zijn m'n al eens goede uitleggen over geweest.

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Op maandag 28 januari 2002 18:55 schreef freak007 het volgende:
Dat heeft te maken met de manier waarop je je gegeeven van de 2 tabellen koppelt. Probeer eens met een inner join te werken.

Meer over joins kan je ongetwijfeld wel vinden in de search ;) Daar zijn m'n al eens goede uitleggen over geweest.
Ik heb even de n**kende search erop nageslagen en ben tot het volgende gekomen
code:
1
2
3
SELECT users.*, merken.Merknaam
FROM users INNER JOIN merken
ON users.merk = merken.ID where users.ID = 1

Dit is zoals je ziet een hele simpele versie van de bovenste waar maar een gedeelte van de data mee opgehaald wordt.

Dus ik tufte even richting MySQL.com om daar wat bij te lezen over INNER JOINS en vond daar dit
table_reference INNER JOIN table_reference join_condition
Het spijt me zeer maar daar kan ik nogal weinig mee. Dus zou iemand misschien uit kunnen leggen hoe ik zo'n INNER JOIN verder moet uitbreiden

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
als je een inner join wil gebruiken kan je het volgende doen:
code:
1
2
3
4
5
6
7
8
SELECT     users.vnaam, 
         merken.Merknaam, 
         typen.Typenaam
FROM     users
INNER JOIN merken ON merken.ID = users.merk
INNER JOIN typen  ON type.ID   = users.type
ORDER BY   users.ID DESC
LIMIt   10

Hiermee krijg je alleen de rijen van de users tabel terug waarvoor ook een merk en type bestaat in die tabellen.

Als j dat niet wil, kan je ook kiezen voor een left join. Hiermee wordt eerst de rijen uit 'users' gehaald en worden bij die resultaten een eventuele waarde van merk en type naaste geplakt.

* Rense Klinkenberg weet dat de uitleg niet 100% goed is, maar 't geeft wel ongeveer aan hoe het zit ;)

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 19:23

WoutF

Hoofdredacteur
Topicstarter
Op maandag 28 januari 2002 22:14 schreef freak007 het volgende:
als je een inner join wil gebruiken kan je het volgende doen:
code:
1
2
3
4
5
6
7
8
SELECT     users.vnaam, 
         merken.Merknaam, 
         typen.Typenaam
FROM     users
INNER JOIN merken ON merken.ID = users.merk
INNER JOIN typen  ON type.ID   = users.type
ORDER BY   users.ID DESC
LIMIt   10

Hiermee krijg je alleen de rijen van de users tabel terug waarvoor ook een merk en type bestaat in die tabellen.

Als j dat niet wil, kan je ook kiezen voor een left join. Hiermee wordt eerst de rijen uit 'users' gehaald en worden bij die resultaten een eventuele waarde van merk en type naaste geplakt.

* WoutF weet dat de uitleg niet 100% goed is, maar 't geeft wel ongeveer aan hoe het zit ;)
Ik snap het helemaal en het werkt ook nog, thanks! :)
* WoutF voelt zich weer een klein beetje slimmer :)

  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 06:39
je kan toch gewoon SELECT TOP 10 blaat.. gebruiken? :?

iig, in access/ODBC wel.

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
tjsa, access |:(

:+
Pagina: 1