login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Joins

Offline rredspike1 - 17/02/2014 20:23 (laatste wijziging 17/02/2014 20:25)
Avatar van rredspike1Lid Ik heb een vraag over JOINS in SQL, ik heb al allerlei joins geprobeerd maar het werkt niet.

Ik heb categories tabel en een sub_categories tabel en deze wil ik laten joinen op met elkaar..

  1. $sql = mysql_query("SELECT * FROM sub_categories JOIN categories ON sub_categories.cid=categories.id ORDER BY categories.id") or die (mysql_error());


Wat gaat er niet goed?

Ik wil de juiste sub_categories bij de juiste categorie als ik deze selecteer..Kan iemand mij uitleggen wat er mis gaat en wat ik kan doen?

5 antwoorden

Gesponsorde links
Offline vinTage - 17/02/2014 21:24
Avatar van vinTage Nieuw lid
rredspike1 schreef:
$sql = mysql_query("SELECT * FROM sub_categories JOIN categories ON sub_categories.cid=categories.id ORDER BY categories.id") or die (mysql_error());


en welke join zou je willen toepassen?

inner, left, right, ..
Offline Thomas - 17/02/2014 22:04 (laatste wijziging 18/02/2014 10:03)
Avatar van Thomas Moderator Als je met die query alle informatie van zowel categorieen als subcategorieen bij elkaar wilt harken, waarbij je dus in je resultaatrijen meerdere keren dezelfde categorie-informatie zult tegenkomen (en per record verschillende subcategorie informatie), er vanuitgaande dat een categorie meerdere subcategorieen heeft en subcategorieen maar tot één categorie kunnen behoren, en wanneer er geen verdere gelaagdheid zit in je categorieen, dan moet je een LEFT of RIGHT JOIN gebruiken.

Je maakt het voor ons wel een beetje moeilijk omdat:
- je niet vertelt wat je precies wilt
- je niet vertelt wat er precies misgaat
- je geen voorbeeld geeft van je dataset (wat zit er concreet in je database?), wat je verwacht, en wat je krijgt
- je geen verdere uitleg geeft van het gedrag dat deze databasestructuur zou moeten volgen
- er staat '... de juiste categorie als ik deze selecteer ...', ik zie nergens een 'WHERE categories.id = ...' ?

Het volgende is een gok:
  1. SELECT *
  2. FROM categories c
  3. LEFT JOIN sub_categories s ON (s.cid = c.id)
  4. ORDER BY c.id


En anders moet je beter uitleggen wat je wilt ...
Offline Wijnand - 18/02/2014 08:40
Avatar van Wijnand Moderator FangorN, je maakte één foutje namelijk die s.cid = s.id
Dit zou moeten zijn s.cid = c.id

Verder doe je SELECT *, maar ze hebben waarschijnlijk allebei een 'id' veld en dit kan problemen opleveren.

Ik zou 'm zo maken:
  1. SELECT
  2. s.*,
  3. c.title AS cattitle
  4. FROM
  5. sub_categories AS s
  6. INNER JOIN
  7. categories AS c
  8. ON
  9. (s.cid = c.id)
  10. ORDER BY
  11. c.id ASC


Er dan van uitgaande dat je een 'title' veld in de categorie hebt zitten (hoofdcategorie) en dat je die wil meenemen.
Bedankt door: Thomas
Offline Stijn - 18/02/2014 23:30
Avatar van Stijn PHP expert
Citaat:
Verder doe je SELECT *, maar ze hebben waarschijnlijk allebei een 'id' veld en dit kan problemen opleveren.

Daarom dat ze table.field syntax uitgevonden hebben...
Offline Wijnand - 19/02/2014 08:40
Avatar van Wijnand Moderator Ja, daarom dat ik dat ook in mijn code zette :-p
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.19s