SQL join voorkom meerdere zelfde resultaten

Pagina: 1
Acties:

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
Ik zit met het volgende probleem. Ik heb meerdere tabellen, namelijk:

#Users(komt niet voor in dit verhaal, maar voor de duidelijkheid)#
#Groups#
CREATE TABLE groups (
GroupID int(2) NOT NULL auto_increment,
GroupName varchar(10) NOT NULL,
GroupDescription varchar(100),
Active tinyint(1),
NotActiveMessage varchar(100),
PRIMARY KEY (GroupID),
);

#Groups_auth#

CREATE TABLE groups_auth (
GroupID int(2) DEFAULT '0' NOT NULL,
UserID int(10) DEFAULT '0' NOT NULL,
LastLogged varchar(15)
);

#Mededelingen#

CREATE TABLE Mededelingen (
MedID int(10) NOT NULL auto_increment,
Onderwerp varchar(30) NOT NULL,
Betreft varchar(30),
Door varchar(30),
Posted_On varchar(30),
Actief_dag int(2),
Actief_maand int(2),
Actief_jaar int(4),
Bericht mediumtext,
Active tinyint(1),
PRIMARY KEY (MedID)
);

#Mededelingen_auth#

CREATE TABLE Mededelingen_auth (
MedID int(10) DEFAULT '0' NOT NULL,
GroupID int(2) DEFAULT '0' NOT NULL,
LastLogged varchar(15)
);

Nu wil ik dus bijvoorbeel de laatste 5 mededelingen hebben. het volgende doet zich voor:
- een user kan lid zijn van meerdere groups (groups_auth)
- een mededeling mag alleen zichtbaar zijn als groep actief is (groups)
- een mededeling kan door het beheer op non actief worden gezet (Mededelingen)

Doordat de mededeling dus meerdere groups omvat, zou het dus zo kunnen zijn dat een bepaalde mededeling 2x (of meer) op de users scherm komt.

Mijn SQL Query heb ik als volgt opgebouwd
SELECT
m.MedID,
m.Onderwerp,
m.Betreft,
m.Door,
m.Posted_On,
m.Actief_dag,
m.Actief_maand,
m.Actief_jaar,
m.Bericht
FROM
Mededelingen m,
Mededelingen_auth a,
Groups g,
Groups_auth ga,
WHERE
m.MedID = a.MedID AND
a.GroupID = ga.GroupID AND
ga.UserID = '$UserID' AND
m.Active = '1' AND
g.Active = '1'
ORDER BY m.MedID DESC
LIMIT 0,5

Hoe kan ik er nu in de Query voor zorgen dat de m.MedID maar 1 keer uniek voorkomt in de resultaten?
Misschien heb ik nog iets gemist, ik loop zo nog effe alles een keertje na :D

edit:

zou iemand trouwens topictitel willen aanpassen... ik ben de [] om de SQL vergeten, sorry


[edit2]
effe typefoutje verbeteren
[/edit2]

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Kijk eens wat GROUP BY doet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Wally-S
  • Registratie: September 2001
  • Laatst online: 04-09 18:53

Wally-S

-Snowboarding is art-

Of Select distinct .....

Snow is only frozen water


  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
Dus in principe is het volgende genoeg

GROUP BY m.MedID

??

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Op zondag 31 maart 2002 12:38 schreef smaij het volgende:
Dus in principe is het volgende genoeg

GROUP BY m.MedID

??
Heb je het al geprobeerd?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
Hij geeft een error, maar in phpadmin staat er geen omschrijving bij :?

dit is het query nu

SELECT m.MedID, m.Onderwerp, m.Betreft, m.Door, m.Posted_On, m.Actief_dag, m.Actief_maand, m.Actief_jaar, m.Bericht
FROM Mededelingen m, Mededelingen_auth a, Groups g, Groups_auth ga
WHERE m.MedID = a.MedID AND
a.GroupID = ga.GroupID AND
ga.UserID = '5' AND
m.Active = '1' AND
g.Active = '1'
GROUP BY m.MedID
ORDER BY m.MedID DESC LIMIT 0,10

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
het werkt al
de LIMIT was de boosdoener.. hoe los ik dat dan weer op?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 31 maart 2002 12:58 schreef smaij het volgende:
het werkt al
de LIMIT was de boosdoener.. hoe los ik dat dan weer op?
limit moet gewoon werken hoor :?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Op zondag 31 maart 2002 12:59 schreef ACM het volgende:

[..]

limit moet gewoon werken hoor :?
Niet met phpMyAdmin, omdat die er uit zichzelf nog een extra limit achter zet :) .. Daarom werk ik persoonlijk voor het testen van queries altijd liever met de mysql prompt+ een CnP schermpje met queries in de ontwerpfase :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
Op zondag 31 maart 2002 12:59 schreef ACM het volgende:

[..]

limit moet gewoon werken hoor :?
Dit komt direct uit de phpmyadmin

Database mvn
Fout
SQL-query:

SELECT m.MedID, m.Onderwerp, m.Betreft, m.Door, m.Posted_On, m.Actief_dag, m.Actief_maand, m.Actief_jaar, m.Bericht
FROM Mededelingen m, Mededelingen_auth a, Groups g, Groups_auth ga
WHERE m.MedID = a.MedID AND
a.GroupID = ga.GroupID AND
ga.UserID = '5' AND
m.Active = '1' AND
g.Active = '1'
GROUP BY m.MedID
ORDER BY m.MedID DESC LIMIT 0,10
MySQL retourneerde:


er word dus niks geretourneerd :(

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
Op zondag 31 maart 2002 13:02 schreef Janoz het volgende:

[..]

Niet met phpMyAdmin, omdat die er uit zichzelf nog een extra limit achter zet :) .. Daarom werk ik persoonlijk voor het testen van queries altijd liever met de mysql prompt+ een CnP schermpje met queries in de ontwerpfase :)
OK, dan was het een domme reply van mij bovenstaande.. sorry

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 31 maart 2002 13:02 schreef Janoz het volgende:
Niet met phpMyAdmin
Ik had het over de query, niet de client waar ie in uitgevoerd werd ;)

Maar idd, phpmyadmin wil nog wel es vervelend zijn, ook als het resultaat erg lang op zich laat wachten enzo.

  • smaij
  • Registratie: November 2000
  • Laatst online: 23:38
Maakt het uit hoe je achter WHERE alles neerzet, kwa efficientie en de snelheid dus van het uitvoeren door MySQL

dus, ik heb meerdere ID = ID2 en dat soort gein erin staan, met AND ertussen, stel dat ik die omdraai, maakt dit uit?
Pagina: 1