Commande SQL
quistora
Messages postés
62
Statut
Membre
-
quistora Messages postés 62 Statut Membre -
quistora Messages postés 62 Statut Membre -
Bonjour,
J'aurais besoin de votre aide car je n'arrive pas à faire un commande sql.
J'ai une table nommé comment qui se présente comme ceci :
id | Pseudo | commentaire | commentaire_id | date
Pour l'instant j'ai fais cette requête qui ne fais pas ce que j'attends :
"SELECT DISTINCT commentaire_id FROM comment ORDER BY id DESC"
C'est le DISTINCT qui me pose problème, il me sélectionne la première entrée, donc la plus ancienne alors que j'aimerai que ce soit la plus récente qui soit sélectionner.
Merci de vos réponse.
J'aurais besoin de votre aide car je n'arrive pas à faire un commande sql.
J'ai une table nommé comment qui se présente comme ceci :
id | Pseudo | commentaire | commentaire_id | date
Pour l'instant j'ai fais cette requête qui ne fais pas ce que j'attends :
"SELECT DISTINCT commentaire_id FROM comment ORDER BY id DESC"
C'est le DISTINCT qui me pose problème, il me sélectionne la première entrée, donc la plus ancienne alors que j'aimerai que ce soit la plus récente qui soit sélectionner.
Merci de vos réponse.
A voir également:
- Commande SQL
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Commande scannow - Guide
- Logiciel sql - Télécharger - Bases de données
13 réponses
Eh bien , remplace DESC par ASC.
De toute manière , si je comprends le contenu de ta table, c'est une construction pourrie.Tu devrais te créer au minimum deux tables:
* la première contenant les informations utilisateur (id, pseudo, pointure....)
* une table contenant les commentaires avec une clé étrangère pointant vers l'id de l'utilisateur.
Tu effectues ensuite les jointures au gré de tes besoins.
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
De toute manière , si je comprends le contenu de ta table, c'est une construction pourrie.Tu devrais te créer au minimum deux tables:
* la première contenant les informations utilisateur (id, pseudo, pointure....)
* une table contenant les commentaires avec une clé étrangère pointant vers l'id de l'utilisateur.
Tu effectues ensuite les jointures au gré de tes besoins.
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
bonjour,
essai de faire ton ORDER BY sur "date".
Sinon essai cette requête:
SELECT commentaire_id
FROM comment
WHERE date = (SELECT max(date)
FROM comment);
Elle permet d'avoir le commentaire sur la dernière date récente.
Celle-ci pour les dates du jour:
SELECT commentaire_id
FROM comment
WHERE date = CURRENT_DATE();
essai de faire ton ORDER BY sur "date".
Sinon essai cette requête:
SELECT commentaire_id
FROM comment
WHERE date = (SELECT max(date)
FROM comment);
Elle permet d'avoir le commentaire sur la dernière date récente.
Celle-ci pour les dates du jour:
SELECT commentaire_id
FROM comment
WHERE date = CURRENT_DATE();
Salut,
Merci de vos réponses.
Je vous présente mieux mon problème :
Je possède 2 tables :
* Une avec les commentaires :
id | titre | pseudo | commentaire | date
* Un deuxième avec les commentaire des commentaires de la table 1 :
id | Pseudo | commentaire | commentaire_id | date
Elle sont jointe grâce au commentaire_id.
Sur ma page d'accueil des commentaires ( http://www.toucheatoncube.fr/commentaires/index.php ), les commentaires sont classé par id décroissant alors que j'aimerai les classé en fonction du dernier commentaire de commentaire créé. (je sais pas si je suis clair ;) )
Donc sur une page de test j'essaye des requêtes:
http://www.toucheatoncube.fr/commentaires1/index.php
<?php
/*
Connexion à la BDD
*/
require "config.php";
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
?>
<table id="tableau_forum" border="1">
<?php
$sql="SELECT DISTINCT commentaire_id FROM comment ORDER BY id DESC";
$req = mysql_query($sql) or die(mysql_error());
while($data = mysql_fetch_assoc($req)) {
$sql2= "SELECT * FROM commentaires WHERE id = {$data['commentaire_id']}";
$req2= mysql_query($sql2) or die(mysql_error());
while($data2 = mysql_fetch_assoc($req2)){
?>
<tr>
<td><a href="comment.php?id=<?php echo $data2['id']; ?>"><?php echo stripslashes($data2['titre']);?></a></td>
<td><?php echo stripslashes($data2['pseudo']);?></td>
<td><?php echo date("d/m/Y G:i", strtotime($data2['date'])); ?></td>
</tr>
</tr>
<?php
}
}
?>
</table>
Merci de votre aide !
Quistora
Merci de vos réponses.
Je vous présente mieux mon problème :
Je possède 2 tables :
* Une avec les commentaires :
id | titre | pseudo | commentaire | date
* Un deuxième avec les commentaire des commentaires de la table 1 :
id | Pseudo | commentaire | commentaire_id | date
Elle sont jointe grâce au commentaire_id.
Sur ma page d'accueil des commentaires ( http://www.toucheatoncube.fr/commentaires/index.php ), les commentaires sont classé par id décroissant alors que j'aimerai les classé en fonction du dernier commentaire de commentaire créé. (je sais pas si je suis clair ;) )
Donc sur une page de test j'essaye des requêtes:
http://www.toucheatoncube.fr/commentaires1/index.php
<?php
/*
Connexion à la BDD
*/
require "config.php";
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
?>
<table id="tableau_forum" border="1">
<?php
$sql="SELECT DISTINCT commentaire_id FROM comment ORDER BY id DESC";
$req = mysql_query($sql) or die(mysql_error());
while($data = mysql_fetch_assoc($req)) {
$sql2= "SELECT * FROM commentaires WHERE id = {$data['commentaire_id']}";
$req2= mysql_query($sql2) or die(mysql_error());
while($data2 = mysql_fetch_assoc($req2)){
?>
<tr>
<td><a href="comment.php?id=<?php echo $data2['id']; ?>"><?php echo stripslashes($data2['titre']);?></a></td>
<td><?php echo stripslashes($data2['pseudo']);?></td>
<td><?php echo date("d/m/Y G:i", strtotime($data2['date'])); ?></td>
</tr>
</tr>
<?php
}
}
?>
</table>
Merci de votre aide !
Quistora
Bonjour,
j'ai modifié tes tables, elles n'allaient pas du tout.
En fait pour que ça soit plus claire, tu doit t'imaginer 2 phrases qui relient tes tables.
Ici : une personne écrit un ou plusieurs commentaire(s), et un commentaire est écrit par une et une seul personne.
Donc voici la traduction de ces phrases avec les tables :
tables modifiés
personne
idPers | pseudo | #idComm ('#' pour clé étrangère, il peut y avoir plusieurs commentaires pour une même personne)
commentaire
idComm | commentaire | date
création des tables en SQL:
create table personne
(idPers integer,
pseudo char(255),
idComm integer,
primary key (idPers)
foreign key (idComm) references commentaire (idComm)
);
create table commentaire
(idComm integer,
commentaire char(255),
date date,
primary key (idComm)
);
Afficher les commentaires du plus récent au plus ancien,
avec le pseudo de la personne et la date:
Select P.pseudo, C.commentaire, C.date
From personne as P, commentaire as C
Where P.idComm = C.idComm
Order By C.date desc;
J'espère que ça te sera utile, pour information, étudier les cas comme ça sur les base de donnée c'est du Merise. C'est très pratique pour savoir comment créer des table et quoi mettre dedans.
j'ai modifié tes tables, elles n'allaient pas du tout.
En fait pour que ça soit plus claire, tu doit t'imaginer 2 phrases qui relient tes tables.
Ici : une personne écrit un ou plusieurs commentaire(s), et un commentaire est écrit par une et une seul personne.
Donc voici la traduction de ces phrases avec les tables :
tables modifiés
personne
idPers | pseudo | #idComm ('#' pour clé étrangère, il peut y avoir plusieurs commentaires pour une même personne)
commentaire
idComm | commentaire | date
création des tables en SQL:
create table personne
(idPers integer,
pseudo char(255),
idComm integer,
primary key (idPers)
foreign key (idComm) references commentaire (idComm)
);
create table commentaire
(idComm integer,
commentaire char(255),
date date,
primary key (idComm)
);
Afficher les commentaires du plus récent au plus ancien,
avec le pseudo de la personne et la date:
Select P.pseudo, C.commentaire, C.date
From personne as P, commentaire as C
Where P.idComm = C.idComm
Order By C.date desc;
J'espère que ça te sera utile, pour information, étudier les cas comme ça sur les base de donnée c'est du Merise. C'est très pratique pour savoir comment créer des table et quoi mettre dedans.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je pense que tu n'a pas compris le système que je souhaite :
car dans ta base, je ne vois pas comment on peut faire pour stocker des commentaires de commentaire !
Sur ma page d'accueil des commentaires ( http://www.toucheatoncube.fr/commentaires/index.php ), les commentaires (commentaire mère ) sont classé par id décroissant alors que j'aimerai les classé en fonction du dernier commentaire de commentaire ( réponses des commentaire mère ) créé.
car dans ta base, je ne vois pas comment on peut faire pour stocker des commentaires de commentaire !
Sur ma page d'accueil des commentaires ( http://www.toucheatoncube.fr/commentaires/index.php ), les commentaires (commentaire mère ) sont classé par id décroissant alors que j'aimerai les classé en fonction du dernier commentaire de commentaire ( réponses des commentaire mère ) créé.
Oui en effet j'ai mieux compris ce que tu veux dire par "commentaire de commentaire".
Gardons la table que j'ai fait précédemment, et rajoute ceci:
personne
idPers | pseudo | #idComm ('#' pour clé étrangère, il peut y avoir plusieurs commentaires pour une même personne)
commentaire
idComm | commentaire | date
reponse
idReponse | commRep | dateRep
lien
#idComm | #idReponse
Requête:
Select P.pseudo, R.commRep, R.dateRep
From personne as P, commentaire as C, reponse as R, lien as L
Where P.idComm = C.idComm
And R.idReponse = L.idReponse
And C.idComm = L.idComm
Order By R.dateRep desc;
Le format date doit prendre en compte l'heure sinon faut rajouter un champ "heure" dans les tables commentaire et reponse, et rajouter dans "Order By" R.heure desc.
Gardons la table que j'ai fait précédemment, et rajoute ceci:
personne
idPers | pseudo | #idComm ('#' pour clé étrangère, il peut y avoir plusieurs commentaires pour une même personne)
commentaire
idComm | commentaire | date
reponse
idReponse | commRep | dateRep
lien
#idComm | #idReponse
Requête:
Select P.pseudo, R.commRep, R.dateRep
From personne as P, commentaire as C, reponse as R, lien as L
Where P.idComm = C.idComm
And R.idReponse = L.idReponse
And C.idComm = L.idComm
Order By R.dateRep desc;
Le format date doit prendre en compte l'heure sinon faut rajouter un champ "heure" dans les tables commentaire et reponse, et rajouter dans "Order By" R.heure desc.
exemple pour clé étrangère:
La clé étrangère représente un champ (ou des champs) qui pointe vers la clé primaire d'une autre table. L'objectif de la clé étrangère est d'assurer l'intégrité référentielle des données. En d'autres mots, seules les valeurs devant apparaître dans la base de données sont permises.
Par exemple, nous avons deux tables, l'une appelée CUSTOMER qui inclut toutes les données du client, et l'autre ORDERS qui comprend ses commandes. La contrainte ici est que toutes les commandes doivent être associées à un client qui se trouve déjà référencé dans la table CUSTOMER. Dans ce cas, une clé étrangère devra être placée sur la table ORDERS et mise en relation avec la clé primaire de la table CUSTOMER. De cette façon, il sera possible d'assurer que toutes les commandes de la table ORDERS sont mises en relation avec un client de la table CUSTOMER. En d'autres mots, la table ORDERS ne peut contenir d'informations sur un client qui ne se trouve pas dans la table CUSTOMER.
La structure de ces deux tables sera comme suit :
Table CUSTOMER
nom de colonne caractéristique
SID Clé primaire
Last_Name
First_Name
Table ORDERS
nom de colonne caractéristique
Order_ID Clé primaire
Order_Date
Customer_SID Clé étrangère
Amount
Dans l'exemple ci-dessus, la colonne Customer_SID de la table ORDERS représente une clé étrangère pointant vers la colonne SID de la table CUSTOMER.
______________________________________________________________
Dans notre table Lien, c'est une contrainte d'intégrité multiple.
idComm et idReponse sont à la fois clé primaire et clé étrangère.
Cette table permet de relier les réponses d'un commentaire.
ex: le Commentaire 1 a 3 réponse
Dans la table tu auras:
idComm | idReponse
1 | 1
1 | 2
1 | 3
Pour savoir comment tu dois relier tes tables, tu imagines des phrases avec 1 verbe et le nom des tables, comme celles-ci:
"une personne peut mettre un ou plusieurs commentaires; un commentaire est mis par une et une seul personne."
Ici on a le mot "plusieurs" qui correspond à la table personne; donc la clé primaire de la table commentaire doit être placé en clé étrangère dans la table personne.
"un commentaire a une ou plusieurs réponse; une réponse peut être dans un ou plusieurs commentaire."
Ici on a 2 fois le mot "plusieurs", on doit créer une table pour les relier, la table "lien" est là pour ça. Avec la table "lien" tu peux avoir les réponses par commentaire.
(En SQL le "par" se traduit GROUP BY)
La clé étrangère représente un champ (ou des champs) qui pointe vers la clé primaire d'une autre table. L'objectif de la clé étrangère est d'assurer l'intégrité référentielle des données. En d'autres mots, seules les valeurs devant apparaître dans la base de données sont permises.
Par exemple, nous avons deux tables, l'une appelée CUSTOMER qui inclut toutes les données du client, et l'autre ORDERS qui comprend ses commandes. La contrainte ici est que toutes les commandes doivent être associées à un client qui se trouve déjà référencé dans la table CUSTOMER. Dans ce cas, une clé étrangère devra être placée sur la table ORDERS et mise en relation avec la clé primaire de la table CUSTOMER. De cette façon, il sera possible d'assurer que toutes les commandes de la table ORDERS sont mises en relation avec un client de la table CUSTOMER. En d'autres mots, la table ORDERS ne peut contenir d'informations sur un client qui ne se trouve pas dans la table CUSTOMER.
La structure de ces deux tables sera comme suit :
Table CUSTOMER
nom de colonne caractéristique
SID Clé primaire
Last_Name
First_Name
Table ORDERS
nom de colonne caractéristique
Order_ID Clé primaire
Order_Date
Customer_SID Clé étrangère
Amount
Dans l'exemple ci-dessus, la colonne Customer_SID de la table ORDERS représente une clé étrangère pointant vers la colonne SID de la table CUSTOMER.
______________________________________________________________
Dans notre table Lien, c'est une contrainte d'intégrité multiple.
idComm et idReponse sont à la fois clé primaire et clé étrangère.
Cette table permet de relier les réponses d'un commentaire.
ex: le Commentaire 1 a 3 réponse
Dans la table tu auras:
idComm | idReponse
1 | 1
1 | 2
1 | 3
Pour savoir comment tu dois relier tes tables, tu imagines des phrases avec 1 verbe et le nom des tables, comme celles-ci:
"une personne peut mettre un ou plusieurs commentaires; un commentaire est mis par une et une seul personne."
Ici on a le mot "plusieurs" qui correspond à la table personne; donc la clé primaire de la table commentaire doit être placé en clé étrangère dans la table personne.
"un commentaire a une ou plusieurs réponse; une réponse peut être dans un ou plusieurs commentaire."
Ici on a 2 fois le mot "plusieurs", on doit créer une table pour les relier, la table "lien" est là pour ça. Avec la table "lien" tu peux avoir les réponses par commentaire.
(En SQL le "par" se traduit GROUP BY)
Ok, j'ai un peu mieux compris même si je ne saisis pas tout.
Avec ton aide, j'ai créé ces tables car c'est ça que je souhaite, peux-tu me dire ce que tu en pense et comment l'améliorer car je pense que c'est largement améliorable ( je débute en php/mysql):
membres :
id_membre | pseudo | mdp | nbmessages
messages :
id_message | titre | contenu | #id_membre | date
reponses :
id_reponse | contenu | #id_membre | date
liens1 :
#id_membre | #id_message
liens2 :
#id_membre | #id_reponse
liens3 :
#id_message | #id_reponse
Et la requête pour sélectionner les messages en fonction de la dernière réponse créer :
SELECT M1.pseudo, M2.titre, R.date
FROM membres AS M1, messages as M2, reponses AS R, liens1 AS L1, liens2 AS L2, liens3 AS L3
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND M2.id_message = L3.id_reponse
AND R.id_reponse = L3.id_reponse
ORDER BY R.date DESC;
Je ne sais pas si sa fonctionne parce je n'ai pas encore tester.
En tout cas, merci de ton aide.
Avec ton aide, j'ai créé ces tables car c'est ça que je souhaite, peux-tu me dire ce que tu en pense et comment l'améliorer car je pense que c'est largement améliorable ( je débute en php/mysql):
membres :
id_membre | pseudo | mdp | nbmessages
messages :
id_message | titre | contenu | #id_membre | date
reponses :
id_reponse | contenu | #id_membre | date
liens1 :
#id_membre | #id_message
liens2 :
#id_membre | #id_reponse
liens3 :
#id_message | #id_reponse
Et la requête pour sélectionner les messages en fonction de la dernière réponse créer :
SELECT M1.pseudo, M2.titre, R.date
FROM membres AS M1, messages as M2, reponses AS R, liens1 AS L1, liens2 AS L2, liens3 AS L3
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND M2.id_message = L3.id_reponse
AND R.id_reponse = L3.id_reponse
ORDER BY R.date DESC;
Je ne sais pas si sa fonctionne parce je n'ai pas encore tester.
En tout cas, merci de ton aide.
Oui elle est bien mais il y a quelques erreurs:
- dans les tables message et réponse faut retirer les clé étrangère id_membre
- tu as le droit de relier plus de 2 tables dans les contraintes d' intégrités multiples:
dans lien1 je mettrai plutôt ceci > #id_membre | #id_message | #id_reponse
le lien2 sera supprimer,
le lien3 est correct, change le nom en lien2.
- ta requête avec les modifications :
SELECT M1.pseudo, M2.titre, R.date
FROM membres AS M1, messages as M2, reponses AS R, liens1 AS L1
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND R.id_reponse = L1.id_reponse
ORDER BY R.date DESC;
Je pense que ça fonctionnera, sinon vérifie les données dans la base avec de modifier la requête.
lien2 te servira si tu veux connaitre le détail des commentaires uniquement pas par rapport au membre.
Tu t'es beaucoup amélioré niveau réflexion et analyse, ce qui n'est pas évident, continue comme ça ;)
- dans les tables message et réponse faut retirer les clé étrangère id_membre
- tu as le droit de relier plus de 2 tables dans les contraintes d' intégrités multiples:
dans lien1 je mettrai plutôt ceci > #id_membre | #id_message | #id_reponse
le lien2 sera supprimer,
le lien3 est correct, change le nom en lien2.
- ta requête avec les modifications :
SELECT M1.pseudo, M2.titre, R.date
FROM membres AS M1, messages as M2, reponses AS R, liens1 AS L1
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND R.id_reponse = L1.id_reponse
ORDER BY R.date DESC;
Je pense que ça fonctionnera, sinon vérifie les données dans la base avec de modifier la requête.
lien2 te servira si tu veux connaitre le détail des commentaires uniquement pas par rapport au membre.
Tu t'es beaucoup amélioré niveau réflexion et analyse, ce qui n'est pas évident, continue comme ça ;)
Salut,
Merci beaucoup pour ton aide précieuse ! ;)
J'ai pas compris ce que signifie "les contraintes d' intégrités multiples" ?
Peut-tu m'expliquer ?
Mes travaux avancent vite grace à ton aide => http://www.toucheatoncube.fr/forum/
Je n'arrive pas à supprimer les doublons de ma page forum.php
Voici le code:
Merci !!!
Merci beaucoup pour ton aide précieuse ! ;)
J'ai pas compris ce que signifie "les contraintes d' intégrités multiples" ?
Peut-tu m'expliquer ?
Mes travaux avancent vite grace à ton aide => http://www.toucheatoncube.fr/forum/
Je n'arrive pas à supprimer les doublons de ma page forum.php
Voici le code:
<table id="tableau_forum" border="1" width="100%">
<tr>
<th>Titre</th>
<th>Auteur</th>
<th>Date</th>
<th>Réponses</th>
</tr>
<?php
$r['messages_non_rep']=mysql_query("
SELECT M1.pseudo, M1.id_membre, M2.titre, M2.id_message, M2.date
FROM membres AS M1, messages as M2, reponses AS R, liens AS L, liens1 AS L1
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND M2.id_message = L.id_message
AND L.id_forum = {$forum_id}
AND M2.resolu = 0
ORDER BY M2.date DESC") or die(mysql_error());
while ($message= mysql_fetch_assoc($r['messages_non_rep'])) {
?>
<tr>
<td><a href="message.php?id=<?php echo $message['id_message']; ?>"><?php echo $message['titre'];?></a></td>
<td><?php echo $message['pseudo'];?></td>
<td><?php
echo $message['date'];?></td>
<td>0</td>
</tr>
<?php
}
$r['message']= mysql_query("
SELECT M1.pseudo, M1.id_membre, M2.titre, M2.id_message, R.date
FROM membres AS M1, messages as M2, reponses AS R, liens AS L, liens1 AS L1, liens2 AS L2
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND M2.id_message = L.id_message
AND L.id_forum = {$forum_id}
AND M2.id_message = L2.id_message
AND R.id_reponse = L2.id_reponse
ORDER BY R.date DESC") or die(mysql_error());
while ($message= mysql_fetch_assoc($r['message'])) {
?>
<tr>
<td><a href="message.php?id=<?php echo $message['id_message']; ?>"><?php echo $message['titre'];?></a></td>
<td><?php echo $message['pseudo'];?></td>
<td><?php echo $message['date'];?></td>
<td><?php
$r['nbreponses']= mysql_query("
SELECT id_message
FROM liens2
WHERE id_message = {$message['id_message']}") or die(mysql_error());
$nbreponses= mysql_num_rows($r['nbreponses']);
echo $nbreponses;
?></td>
</tr>
<?php
}
?>
</table>
Merci !!!
Voici un exemple claire sur les contraintes d'intégrités:
"L'association est un lien sémantique entre une ou plusieurs entités : l'association peut être réflexive, de préférence binaire (ex : une usine 'est implantée' dans un pays), parfois ternaire, voire de dimension supérieure. Elle peut également être porteuse d'une ou plusieurs propriétés (ex : 'date d'implantation' d'une usine dans un pays)
Cette description sémantique est enrichie par la notion de cardinalité, celle-ci indique le nombre minimum (0 ou 1) et maximum (1 ou n) de fois où une occurrence quelconque d'une entité peut participer à une association (ex: une usine est implantée dans un (card. min=1) et un seul (card. max=1) pays; et réciproquement un pays peut faire l'objet soit d'aucune (card. min=0) implantation d'usine soit de plusieurs (card. max=n). Il existe deux types d'associations : les CIF (Contrainte d'intégrité fonctionnelle)et les CIM (contrainte d'intégrité multiple). Les CIF ont pour particularité d'être binaires et d'avoir une card min à 0 ou 1 et une card max à 1, de plus elles sont non porteuses de propriétés. Les CIM sont n-aires et ont toutes leurs cardinalités max à n, de plus elles peuvent être porteuses de propriétés."
Pour les doublons rajoute DISTINCT(M2.id_message) dans tes requêtes.
Fait des tests pour voir s'il affiche bien les messages qu'il faut et pas en double.
"L'association est un lien sémantique entre une ou plusieurs entités : l'association peut être réflexive, de préférence binaire (ex : une usine 'est implantée' dans un pays), parfois ternaire, voire de dimension supérieure. Elle peut également être porteuse d'une ou plusieurs propriétés (ex : 'date d'implantation' d'une usine dans un pays)
Cette description sémantique est enrichie par la notion de cardinalité, celle-ci indique le nombre minimum (0 ou 1) et maximum (1 ou n) de fois où une occurrence quelconque d'une entité peut participer à une association (ex: une usine est implantée dans un (card. min=1) et un seul (card. max=1) pays; et réciproquement un pays peut faire l'objet soit d'aucune (card. min=0) implantation d'usine soit de plusieurs (card. max=n). Il existe deux types d'associations : les CIF (Contrainte d'intégrité fonctionnelle)et les CIM (contrainte d'intégrité multiple). Les CIF ont pour particularité d'être binaires et d'avoir une card min à 0 ou 1 et une card max à 1, de plus elles sont non porteuses de propriétés. Les CIM sont n-aires et ont toutes leurs cardinalités max à n, de plus elles peuvent être porteuses de propriétés."
Pour les doublons rajoute DISTINCT(M2.id_message) dans tes requêtes.
Fait des tests pour voir s'il affiche bien les messages qu'il faut et pas en double.
Salut !!
Alors je reviens pour te dire que mon forum fonctionne entièrement !
J'ai quand même un problème que je n'arrive pas à résoudre :
Je n'arrive toujours pas à supprimer les doublons de ma page forum.php même avec DISTINCT(M2.id_message) :
Voila l'erreur :
J'ai donc essayer un GROUP BY M2.id_message, cela m'affiche les message en fonction de leur date de création or je souhaiterais que cela m'affiche les messages en fonction de la date de la dernière réponse créer.
Merci ! :)
Alors je reviens pour te dire que mon forum fonctionne entièrement !
J'ai quand même un problème que je n'arrive pas à résoudre :
Je n'arrive toujours pas à supprimer les doublons de ma page forum.php même avec DISTINCT(M2.id_message) :
SELECT M1.pseudo, M1.id_membre, M2.titre, DISTINCT(M2.id_message), R.date
FROM membres AS M1, messages AS M2, reponses AS R, liens AS L, liens1 AS L1, liens2 AS L2
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND M2.id_message = L.id_message
AND L.id_forum = {$forum_id}
AND M2.id_message = L2.id_message
AND R.id_reponse = L2.id_reponse
ORDER BY R.date DESC
Voila l'erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(M2.id_message), R.date FROM membres AS M1, messages AS M2, reponses A' at line 1
J'ai donc essayer un GROUP BY M2.id_message, cela m'affiche les message en fonction de leur date de création or je souhaiterais que cela m'affiche les messages en fonction de la date de la dernière réponse créer.
SELECT M1.pseudo, M1.id_membre, M2.titre, M2.id_message, R.date
FROM membres AS M1, messages AS M2, reponses AS R, liens AS L, liens1 AS L1, liens2 AS L2
WHERE M1.id_membre = L1.id_membre
AND M2.id_message = L1.id_message
AND M2.id_message = L.id_message
AND L.id_forum = {$forum_id}
AND M2.id_message = L2.id_message
AND R.id_reponse = L2.id_reponse
GROUP BY M2.id_message
ORDER BY R.date DESC
Merci ! :)