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
[edit2]
effe typefoutje verbeteren
[/edit2]
#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
edit:
zou iemand trouwens topictitel willen aanpassen... ik ben de [] om de SQL vergeten, sorry
zou iemand trouwens topictitel willen aanpassen... ik ben de [] om de SQL vergeten, sorry
[edit2]
effe typefoutje verbeteren
[/edit2]