OVH Cloud OVH Cloud

Question sur une requete groupée

3 réponses
Avatar
ThunderMusic
Bonjour,
Je suis en train de développer un Forum de discution qui utilise une
base de données SQL Server 2000. Je voudrais pour chaque forum connaitre le
nombre de topics (sujets) et le nombre de posts ainsi que la date du dernier
post et l'utilisateur qui l'a posté.

voici la structure de mes tables (le message continue apres) :

T_Forum
-----------
ID_Forum
Category
Name
Description
Display_Order (Sort ascendant)

T_Topic
----------
ID_Topic
Parent_Forum
Title

T_Post
---------
ID_Post
Parent_Topic
DT_Post (Ca c'est la date)
Subject
Content
By_User

T_User
---------
ID_User
Username
Password
E_Mail

ma requete ressemble à ca pour l'instant, mais je ne suis pas capable
d'ajouter la date du dernier post ni l'utilisateur rattaché. Quelqu'un peu
m'aider svp?

SELECT T_Forum.ID_Forum, T_Forum.Name,
T_Forum.Description,
T_Forum.Display_Order,
COUNT(DISTINCT T_Topic.ID_Topic) AS TopicCount,
COUNT(T_Post.ID_Post) AS PostCount
FROM T_Forum INNER JOIN
T_Topic ON
T_Forum.ID_Forum = T_Topic.Parent_Forum INNER JOIN
T_Post ON
T_Topic.ID_Topic = T_Post.Parent_Topic
GROUP BY T_Forum.ID_Forum, T_Forum.Name,
T_Forum.Description, T_Forum.Image,
T_Forum.Display_Order


Merci à l'avance

ThunderMusic

3 réponses

Avatar
Fred BROUARD
il serait nécessaire que tu normalise ta base. En l'occurence quelles
sont les intégrité référentielles... et les références de clefs
étrangères...

Si Parent_Forum est lié à ID_Forum en IR , alors ces colonnes doivent
avoir le même nom. Sans ces indications il est difficile de te répondre...

Un conseil...

Donne les ordres SQL de création de tes tables (CREATE TABLE) ainsi que
les INSERT d'un jeu de données basique afin que tout un chacun puisse
reproduire ce que tu veut faire sur son SGBDR afin de mieux t'ider.
Exemple :
Code:

CREATE TABLE MaTable
(Col1 VARCHAR(128),
Col2 INTEGER,
Col3 DATE,
Col4 CHAR(32),
CONSTRAINT PK_MaTable PRIMARY KEY (COL1, COL2))

INSERT INTO MaTable (COL1, COL2, COL3)
VALUES ('Un mot', 32, CURRENT_TIMESTAMP)
INSERT INTO MaTable (COL1, COL2, COL3)
VALUES ('Deux maux', 0, NULL)

Cela permet à ceux qui tentent de t'aider de reproduire exactement les
conditions de ta requête avec votre jeu d'essais afin de t'aider le plus
possible. C'est aussi une marque de politesse.


Si tu ne le sait pas, sachez que tout bon SGBDR permet de restituter le
script de création de toutes les tables de la base ! En l'occurence sous
SQL Server, Entreprise Manager, Clic droit sur la table, Toutes les
tâches, Script...

A +

ThunderMusic a écrit:
Bonjour,
Je suis en train de développer un Forum de discution qui utilise une
base de données SQL Server 2000. Je voudrais pour chaque forum connaitre le
nombre de topics (sujets) et le nombre de posts ainsi que la date du dernier
post et l'utilisateur qui l'a posté.

voici la structure de mes tables (le message continue apres) :

T_Forum
-----------
ID_Forum
Category
Name
Description
Display_Order (Sort ascendant)

T_Topic
----------
ID_Topic
Parent_Forum
Title

T_Post
---------
ID_Post
Parent_Topic
DT_Post (Ca c'est la date)
Subject
Content
By_User

T_User
---------
ID_User
Username
Password
E_Mail

ma requete ressemble à ca pour l'instant, mais je ne suis pas capable
d'ajouter la date du dernier post ni l'utilisateur rattaché. Quelqu'un peu
m'aider svp?

SELECT T_Forum.ID_Forum, T_Forum.Name,
T_Forum.Description,
T_Forum.Display_Order,
COUNT(DISTINCT T_Topic.ID_Topic) AS TopicCount,
COUNT(T_Post.ID_Post) AS PostCount
FROM T_Forum INNER JOIN
T_Topic ON
T_Forum.ID_Forum = T_Topic.Parent_Forum INNER JOIN
T_Post ON
T_Topic.ID_Topic = T_Post.Parent_Topic
GROUP BY T_Forum.ID_Forum, T_Forum.Name,
T_Forum.Description, T_Forum.Image,
T_Forum.Display_Order


Merci à l'avance

ThunderMusic





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
Fred BROUARD
Le problème est le même !
Dans ton modèle il n'y a pas les raltions entre les tables......

Comment savoir quelle table est liée avec quelle autre?

As tu entendu parlé de relation et d'intégrité référentielle ???

Impossible de t'aider sans cela !

A +



ThunderMusic a écrit:
voici le script de creation de la DB. Je n'ai pas de jeu de données à
fournir, mais je crois qu'il sera assez facile de créer des enregistrements
qui peuvent faire l'affaire.

T_Post est dépendant de T_Topic et T_Topic est dépendant de T_Forum. Ensuite
il y a les utilisateurs à entrer et leur position (admin, newbie, etc) et
une categorie de forum (general, products, etc.). Si vous le voulez, vous
pouvez vous entrer des images, mais ce n'est pas necessaire...

Si vous avez besoin de plus de détails, faites un reply et je ferai mon
possible pour vous les fournir.

Merci de votre aide.

ThunderMusic

"Fred BROUARD" wrote in message
news:%

il serait nécessaire que tu normalise ta base. En l'occurence quelles
sont les intégrité référentielles... et les références de clefs
étrangères...

Si Parent_Forum est lié à ID_Forum en IR , alors ces colonnes doivent
avoir le même nom. Sans ces indications il est difficile de te répondre...

Un conseil...

Donne les ordres SQL de création de tes tables (CREATE TABLE) ainsi que
les INSERT d'un jeu de données basique afin que tout un chacun puisse
reproduire ce que tu veut faire sur son SGBDR afin de mieux t'ider.
Exemple :
Code:

CREATE TABLE MaTable
(Col1 VARCHAR(128),
Col2 INTEGER,
Col3 DATE,
Col4 CHAR(32),
CONSTRAINT PK_MaTable PRIMARY KEY (COL1, COL2))

INSERT INTO MaTable (COL1, COL2, COL3)
VALUES ('Un mot', 32, CURRENT_TIMESTAMP)
INSERT INTO MaTable (COL1, COL2, COL3)
VALUES ('Deux maux', 0, NULL)

Cela permet à ceux qui tentent de t'aider de reproduire exactement les
conditions de ta requête avec votre jeu d'essais afin de t'aider le plus
possible. C'est aussi une marque de politesse.


Si tu ne le sait pas, sachez que tout bon SGBDR permet de restituter le
script de création de toutes les tables de la base ! En l'occurence sous
SQL Server, Entreprise Manager, Clic droit sur la table, Toutes les
tâches, Script...

A +

ThunderMusic a écrit:

Bonjour,
Je suis en train de développer un Forum de discution qui utilise





une

base de données SQL Server 2000. Je voudrais pour chaque forum connaitre





le

nombre de topics (sujets) et le nombre de posts ainsi que la date du





dernier

post et l'utilisateur qui l'a posté.

voici la structure de mes tables (le message continue apres) :

T_Forum
-----------
ID_Forum
Category
Name
Description
Display_Order (Sort ascendant)

T_Topic
----------
ID_Topic
Parent_Forum
Title

T_Post
---------
ID_Post
Parent_Topic
DT_Post (Ca c'est la date)
Subject
Content
By_User

T_User
---------
ID_User
Username
Password
E_Mail

ma requete ressemble à ca pour l'instant, mais je ne suis pas capable
d'ajouter la date du dernier post ni l'utilisateur rattaché. Quelqu'un





peu

m'aider svp?

SELECT T_Forum.ID_Forum, T_Forum.Name,
T_Forum.Description,
T_Forum.Display_Order,
COUNT(DISTINCT T_Topic.ID_Topic) AS TopicCount,
COUNT(T_Post.ID_Post) AS PostCount
FROM T_Forum INNER JOIN
T_Topic ON
T_Forum.ID_Forum = T_Topic.Parent_Forum INNER JOIN
T_Post ON
T_Topic.ID_Topic = T_Post.Parent_Topic
GROUP BY T_Forum.ID_Forum, T_Forum.Name,
T_Forum.Description, T_Forum.Image,
T_Forum.Display_Order


Merci à l'avance

ThunderMusic





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************









--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
ThunderMusic
Oui j'ai entendu parlé de relation et d'intégrité référentielles. Cependant,
je n'ai pas trouvé comment les exporter en texte(sql) dans SQL Server 2000.
C'est pourquoi j'ai tenté de les expliqué plus ou moins rapidement (pas très
efficacement) dans mon dernier post.

Finalement, j'ai passé par des vues qui utilisent des vues. Je sais que ce
n'est pas optimal, mais ca fait ce dont j'ai besoin pour l'instant.
Cependant, j'aurais une question à ce sujet. Est-ce plus performat
d'utiliser des select imbriqués que des vues qui utilisent des vues?

Parce que présentement, j'ai une vu qui pour un forum donné va chercher l'ID
du Post le plus recent, une autre vue qui utilise la première vue pour aller
chercher la date et l'utilisateur correspondant (et garde l'ID du forum) et
ensuite ma vu principale (qui liste les forums) qui fait appel à la 2ieme
vue (celle de la date et de l'utilisateur) pour aller chercher les
informations du dernier post de chaque forum.

Cette façon de faire fonctionne, mais je me demande s'il y aurait moyen
d'optimiser en passant par 1 vue avec des select imbriqués plutôt que par
ces 3 vues. Est-ce que j'aurais un gain de performance ou ca revient au
même?

Merci

ThunderMusic

"Fred BROUARD" wrote in message
news:
Le problème est le même !
Dans ton modèle il n'y a pas les raltions entre les tables......

Comment savoir quelle table est liée avec quelle autre?

As tu entendu parlé de relation et d'intégrité référentielle ???

Impossible de t'aider sans cela !

A +



ThunderMusic a écrit:
> voici le script de creation de la DB. Je n'ai pas de jeu de données à
> fournir, mais je crois qu'il sera assez facile de créer des


enregistrements
> qui peuvent faire l'affaire.
>
> T_Post est dépendant de T_Topic et T_Topic est dépendant de T_Forum.


Ensuite
> il y a les utilisateurs à entrer et leur position (admin, newbie, etc)


et
> une categorie de forum (general, products, etc.). Si vous le voulez,


vous
> pouvez vous entrer des images, mais ce n'est pas necessaire...
>
> Si vous avez besoin de plus de détails, faites un reply et je ferai mon
> possible pour vous les fournir.
>
> Merci de votre aide.
>
> ThunderMusic
>
> "Fred BROUARD" wrote in message
> news:%
>
>>il serait nécessaire que tu normalise ta base. En l'occurence quelles
>>sont les intégrité référentielles... et les références de clefs
>>étrangères...
>>
>>Si Parent_Forum est lié à ID_Forum en IR , alors ces colonnes doivent
>>avoir le même nom. Sans ces indications il est difficile de te


répondre...
>>
>>Un conseil...
>>
>>Donne les ordres SQL de création de tes tables (CREATE TABLE) ainsi que
>>les INSERT d'un jeu de données basique afin que tout un chacun puisse
>>reproduire ce que tu veut faire sur son SGBDR afin de mieux t'ider.
>>Exemple :
>>Code:
>>
>>CREATE TABLE MaTable
>>(Col1 VARCHAR(128),
>> Col2 INTEGER,
>> Col3 DATE,
>> Col4 CHAR(32),
>> CONSTRAINT PK_MaTable PRIMARY KEY (COL1, COL2))
>>
>>INSERT INTO MaTable (COL1, COL2, COL3)
>>VALUES ('Un mot', 32, CURRENT_TIMESTAMP)
>>INSERT INTO MaTable (COL1, COL2, COL3)
>>VALUES ('Deux maux', 0, NULL)
>>
>>Cela permet à ceux qui tentent de t'aider de reproduire exactement les
>>conditions de ta requête avec votre jeu d'essais afin de t'aider le plus
>>possible. C'est aussi une marque de politesse.
>>
>>
>>Si tu ne le sait pas, sachez que tout bon SGBDR permet de restituter le
>>script de création de toutes les tables de la base ! En l'occurence sous
>>SQL Server, Entreprise Manager, Clic droit sur la table, Toutes les
>>tâches, Script...
>>
>>A +
>>
>>ThunderMusic a écrit:
>>
>>>Bonjour,
>>> Je suis en train de développer un Forum de discution qui


utilise
>
> une
>
>>>base de données SQL Server 2000. Je voudrais pour chaque forum


connaitre
>
> le
>
>>>nombre de topics (sujets) et le nombre de posts ainsi que la date du
>
> dernier
>
>>>post et l'utilisateur qui l'a posté.
>>>
>>>voici la structure de mes tables (le message continue apres) :
>>>
>>>T_Forum
>>>-----------
>>>ID_Forum
>>>Category
>>>Name
>>>Description
>>>Display_Order (Sort ascendant)
>>>
>>>T_Topic
>>>----------
>>>ID_Topic
>>>Parent_Forum
>>>Title
>>>
>>>T_Post
>>>---------
>>>ID_Post
>>>Parent_Topic
>>>DT_Post (Ca c'est la date)
>>>Subject
>>>Content
>>>By_User
>>>
>>>T_User
>>>---------
>>>ID_User
>>>Username
>>>Password
>>>E_Mail
>>>
>>>ma requete ressemble à ca pour l'instant, mais je ne suis pas capable
>>>d'ajouter la date du dernier post ni l'utilisateur rattaché. Quelqu'un
>
> peu
>
>>>m'aider svp?
>>>
>>>SELECT T_Forum.ID_Forum, T_Forum.Name,
>>> T_Forum.Description,
>>> T_Forum.Display_Order,
>>> COUNT(DISTINCT T_Topic.ID_Topic) AS TopicCount,
>>> COUNT(T_Post.ID_Post) AS PostCount
>>>FROM T_Forum INNER JOIN
>>> T_Topic ON
>>> T_Forum.ID_Forum = T_Topic.Parent_Forum INNER JOIN
>>> T_Post ON
>>> T_Topic.ID_Topic = T_Post.Parent_Topic
>>>GROUP BY T_Forum.ID_Forum, T_Forum.Name,
>>> T_Forum.Description, T_Forum.Image,
>>> T_Forum.Display_Order
>>>
>>>
>>>Merci à l'avance
>>>
>>>ThunderMusic
>>>
>>>
>>
>>--
>>Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
>>Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>>Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>>****************** mailto: ******************
>>
>
>
>

--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************