Toon posts:

[MySQL] Select Objecten op basis van category

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een website te maken, hierin heb ik een script dat een aantal onderdelen draait van mijn site (dat script noem ik RAN). Met RAN kan je oa nieuws maken/bewerken, met erg veel mogelijkheden.

Ik heb 3 tabellen:

content_x_front:
IDname
1whoasd
23567fdgndfgh


content_x_cat:
IDname
1something
2blaat


content_x_iscat:
IDmain_idcat_id
112
221
322


Ik heb een list op een pagina, die leest content_x_cat uit. Dit gaat perfect zoals ik het wil. Echter wil ik nou een zoekfunctie maken waarmee je ook kan kiezen in welke category's hij moet zoeken, om dit uit te lezen wil ik een combinatie maken van de content_x_front en content_x_iscat.

Ik dacht zelf aan ongeveer de volgende constructie:
SQL:
1
2
3
4
SELECT * FROM content_x_front 
  LEFT JOIN content_x_iscat ON
    content_x_front.id=content_x_iscat.main_id 
WHERE content_x_iscat.cat_id IN (1,2);

natuurlijk laat ik wat dingen weg, maar dat is niet belangrijk voor het probleem

Het probleem is dat ik bij deze constructie de data vaker dan 1x terugkrijg, ik denk dat hij dit door de LEFT JOIN en dan in het speciaal het ON commando.

De vraag is nou, moet dit wel met een LEFT JOIN gedaan worden? En zoja, waar maak ik dan de fout dat hij meerdere results geeft ipv gewoon 1 result per object.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Voldoet een INNER JOIN niet aan je eisen? Zo niet, dan kun je altijd proberen te groupen op een van de dubbele velden...

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


Verwijderd

Topicstarter
code:
1
2
3
4
SELECT * FROM content_x_front
INNER JOIN content_x_iscat ON
content_x_front.id=content_xs_iscat.main_id
WHERE content_x_iscat.cat_id IN (1,2)

Of denk ik nou fout?
Ik heb echt een hekel aan de MySQL site, echt onlogisch gemaakt en niet te begrijpen (geen goeie voorbeelden). PHP.net is toch beter wat dat betreft (daar is iets van te snappen).

Als ik dat doe dan krijg ik objecten ook vaker terug, maar dan niet direct achter elkaar.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

DISTINCT?

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


Verwijderd

Topicstarter
Na wat proberen met DISTINCT blijft dat ik iets fout doe of dat DISTINCT niet (goed) werkt.
code:
1
2
SELECT DISTINCT * FROM content_x_front
WHERE content_x_front.id=content_x_iscat.main_id

Met WHERE dan krijg ik geen results, zonder where wel. Dus ik kan niet eens kijken of de category voorkomt. Mja lekker is dat.

Ligt het nou aan mij of is die MySQL website vaag? Ik snap er echt helemaal niets van wat ze bedoelen met al die gekke commands door elkaar (en normaal kan ik er wel iets mee doen, maar met de MySQL site heb ik het nooit gesnapt).

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 14 september 2004 @ 20:05:
Na wat proberen met DISTINCT blijft dat ik iets fout doe of dat DISTINCT niet (goed) werkt.
code:
1
2
SELECT DISTINCT * FROM content_x_front
WHERE content_x_front.id=content_x_iscat.main_id

Met WHERE dan krijg ik geen results, zonder where wel. Dus ik kan niet eens kijken of de category voorkomt. Mja lekker is dat.

Ligt het nou aan mij of is die MySQL website vaag? Ik snap er echt helemaal niets van wat ze bedoelen met al die gekke commands door elkaar (en normaal kan ik er wel iets mee doen, maar met de MySQL site heb ik het nooit gesnapt).
Probeer eens dit:
code:
1
2
SELECT DISTINCT * FROM content_x_front, content_x_iscat
WHERE content_x_front.id=content_x_iscat.main_id

Ik weet ook niet waarom je query zo'n raar resultaat levert. MySQL is nogal een vage implementatie van SQL... Maar met de documentatie is niets mis hoor. :P

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


Verwijderd

Topicstarter
Ik heb het nou op de volgende manier gedaan, het is niet de beste oplossig maar het werkt bijna perfect.
code:
1
2
3
4
5
6
SELECT * FROM content_x_front 
LEFT JOIN content_x_iscat 
  ON content_x_front.id=content_x_iscat.main_id
WHERE content_x_iscat.cat_id IN (1,2,3) 
GROUP BY content_x_front.id ORDER BY poster_stamp 
DESC LIMIT 0,10;

Echter krijg ik hierdoor verkeerde ID's terug, ik krijg ipv de content_x_front.id de content_x_iscat.id terug. Dat is niet echt de bedoeling (doorlinken naar het verkeerde object ID).

Waarom krijg ik de content_x_iscat.id terug ipv content_x_front.id?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Kijk eerste eens wat je op wil vragen en wat je nu op zit te vragen.
Ik weet niet wat MySQL doet als je '*' op probeert te vragen uit een join van 2 tabellen, maar duidelijker wordt het er niet op.

Who is John Galt?

Pagina: 1