probleme DISTINCT() avec Jointure

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme DISTINCT() avec Jointure

par Berzemus » 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

par Xenon_54 » 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?

par Berzemus » 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..

par JOHAAANNS » 11 janv. 2008, 10:28

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

par Hywan » 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).

probleme DISTINCT() avec Jointure

par JOHAAANNS » 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;