probleme DISTINCT() avec Jointure

Eléphant du PHP | 178 Messages

10 janv. 2008, 13:54

Bonjour,

Voila mon soucis, j'ai cette requete :
"SELECT DISTINCT(liens.lien_id) FROM liens 
	LEFT JOIN sous_themes ON liens.lien_theme_id = sous_themes.sous_theme_theme_id
	WHERE lien_theme_id='".$theme_id."' ORDER BY sous_theme_nom, lien_nom_site ASC"
Dans ma table j'ai 13 sous_themes et 217 liens

Quand je fait un total :
echo $nb_total=mysql_num_rows($ret);
Il m'affiche bien le nombre de lien, c'est a dire 217.

Mais comment je peux faire dans ma requete pour avoir un total avec le nombre de sous_themes.

En gros 217 pour les liens + 13 pour les sous_themes = 230

je voulais placer un autre distinct() mais ca ne marche..

J'ai besoin de recuperer ce total pour l'affichage page par page...et surtout aussi afficher le resultat

merci de votre aide.


-- 
-- Structure de la table 'liens'
-- 
CREATE TABLE liens (
  lien_id int(10) NOT NULL auto_increment,
  lien_rubrique_id int(10) NOT NULL default '0',
  lien_theme_id int(10) default NULL,
  lien_sous_theme_id int(10) default NULL,
  lien_nom_site varchar(255) NOT NULL default '',
  lien_url text NOT NULL,
  lien_description text NOT NULL,
  lien_date int(25) NOT NULL default '0',
  lien_posteur_id int(25) NOT NULL default '0',
  lien_nbr_clique int(25) NOT NULL default '0',
  PRIMARY KEY  (lien_id)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
-- 
-- Structure de la table 'sous_themes'
-- 

CREATE TABLE sous_themes (
  sous_theme_id int(25) NOT NULL auto_increment,
  sous_theme_rubrique_id int(25) NOT NULL default '0',
  sous_theme_theme_id int(25) NOT NULL default '0',
  sous_theme_nom varchar(255) NOT NULL default '',
  sous_theme_date int(25) NOT NULL default '0',
  PRIMARY KEY  (sous_theme_id)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

ViPHP
ViPHP | 4674 Messages

10 janv. 2008, 16:48

Je n'ai pas regardé la structure des tables en détail, mais regarde du côté de COUNT(DISTINCT ...) qui est disponible en SQL. N'oublie pas des HAVING et GROUP BY dans ce cas là. Tu peux même faire un sous-SELECT dans ton COUNT (donc avec DISTINCT).
Avec cette solution, ce sera le moteur SQL qui va compter ce que tu veux, et pas PHP (plus rapide donc).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 178 Messages

11 janv. 2008, 10:28

Hum !!! :-k je seche un peu !!!!

ViPHP
ViPHP | 4039 Messages

11 janv. 2008, 12:20

Si j'ai bien compris, ceci devrait te donner ce que tu recherches:

Code : Tout sélectionner

SELECT a.total as total_liens, b.total as total_sousthemes, (a.total + b.total) as total FROM (SELECT count(lien_id) as total from liens) as a, (SELECT count(sous_theme_id) as total from sous_themes) as b
Je crée un tableau (a) qui contient le nombre de liens, un autre (b) avec le nombre de sous-thèmes, je mets le tout dans un tableau final avec en troisième colonne l'addition des deux..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 1885 Messages

11 janv. 2008, 12:25

À mon avis, il faudra faire une 2e requête séparée qui contiendra 2 sous-requêtes:

Code : Tout sélectionner

SELECT (SELECT COUNT(liens.lien_theme_id) FROM liens) + (SELECT COUNT(sous_themes.sous_theme_theme_id) FROM sous_themes) as total
Autrement, je ne comprends pas le but de ta requête. Quel sera le type d'affichage fait? Est-ce que ce sera une liste de liens avec le nom du sous_theme associé?

Dans ce cas, le nombre total de liens suffit. Non?
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

ViPHP
ViPHP | 4039 Messages

11 janv. 2008, 12:32

À mon avis, il faudra faire une 2e requête séparée qui contiendra 2 sous-requêtes:

Code : Tout sélectionner

SELECT (SELECT COUNT(liens.lien_theme_id) FROM liens) + (SELECT COUNT(sous_themes.sous_theme_theme_id) FROM sous_themes) as total
Autrement, je ne comprends pas le but de ta requête. Quel sera le type d'affichage fait? Est-ce que ce sera une liste de liens avec le nom du sous_theme associé?

Dans ce cas, le nombre total de liens suffit. Non?
Eum, j'ai pas bien suivi, tu me demandes à moi ? :?:

Pour info, ma requête devrais retourner un résultat comme ceci:

Code : Tout sélectionner

total_liens total_sousthemes total ----------- ---------------- ----- 217 13 230
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.