Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2011, 13h55   #1
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Par défaut compter le nombre d'enregistrements dans une requete sql

Bonjour,
Je viens vers vous car j'ai un problème avec une requête. Je développe un site multilingue et ce que j'aimerais faire, c'est compter le nombre d'offres associées à un domaine donné en fonction de la langue. Ma requête est comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
public FUNCTION getDomainesDetails($langCode, $isObject= true){
		 $sql = "SELECT 	{$this->alias}.`domaineId` as id, 
							{$this->alias}.`domaineParentId` as parent, 
							{$this->alias}.`domaineDateCreation`, 
							{$this->alias}.`domaineDateModif`, 
							dt.`domaineTextId`, 
							dt.`domaineId`, 
							dt.`langCode`, 
							dt.`domaineTitre` as name, 
							dt.`domaineMetaTitle`, 
							dt.`domaineMetaKeywords`, 
							dt.`domaineMetaDescription`, 
							dt.`domaineAliasUrl`,
							(SELECT COUNT(offreId) FROM recrutement_offre o WHERE o.`domaineId` = {$this->alias}.`domaineId` AND dt.langCode = '{$langCode}' AND o.`offreActive` = 1 ) as nbOffres
				FROM	`{$this->table}` {$this->alias}
				INNER JOIN `recrutement_domaine_text` dt ON {$this->alias}.`domaineId` = dt.`domaineId` 
				LEFT JOIN `thermidor_language` l ON  dt.`langCode` = l.`langCode`
				WHERE dt.langCode = '{$langCode}'
		";
 
		IF($results = DATABASE::execute_sql($sql))
			RETURN $this->parseResults($results, $isObject);
 
	}
Mon problème, c'est que cette requête m'affiche bien tous les domaines, par contre elle ne donne pas le nombre d'offres dans une langue donnée, elle me donne le nombre de toutes les offres.
Le problème de cette requête est :
Code :
1
2
 
(SELECT COUNT(offreId) FROM recrutement_offre o WHERE o.`domaineId` = {$this->alias}.`domaineId` AND dt.langCode = '{$langCode}' AND o.`offreActive` = 1 ) AS nbOffres
Merci d'avance pour votre aide
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 15h46   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 433
Points : 6 433
Bonjour,

Pour optimiser vos chances d'obtenir une réponse pertinente sur un forum dédié au SQL et à MySQL, il serait préférable de remplacer vos variables ($this...) par leur contenu, et nous fournir votre modèle de données. Un petit jeu de données et le résultat attendu ne seraient pas de trop non plus...
Pour l'instant, il me semble que la sous-requête est inutile, et remplaçable par une requête avec un COUNT et un GROUP BY bien établi.
Mais ça serait plus simple avec les vrais noms des tables et le modèle de données...
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 13h48   #3
Membre à l'essai
 
Femme
Développeur Web Junior
Inscription : novembre 2009
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur Web Junior

Informations forums :
Inscription : novembre 2009
Messages : 124
Points : 22
Points : 22
Merci pour votre réponse,
je viens de trouver le problème de ma requête, je l'ai reformulé comme suit:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT r.`domaineId` AS id, r.`domaineParentId` AS parent, r.`domaineDateCreation`, r.`domaineDateModif`, dt.`domaineTextId`
, dt.`domaineId`, dt.`langCode`, dt.`domaineTitre` AS name, dt.`domaineMetaTitle`, dt.`domaineMetaKeywords`, dt.`domaineMetaDescription`, dt.`domaineAliasUrl`
, ( 
    SELECT COUNT(o.offreId) 
    FROM recrutement_offre o 
    INNER JOIN recrutement_offre_text rot ON o.offreId = rot.offreId AND rot.langCode = 'fr' 
    WHERE o.`domaineId` = r.`domaineId` AND o.`offreActive` = 1 
) AS nbOffres 
FROM `recrutement_domaine` r 
INNER JOIN `recrutement_domaine_text` dt ON r.`domaineId` = dt.`domaineId` 
LEFT JOIN `thermidor_language` l ON dt.`langCode` = l.`langCode` 
WHERE dt.langCode = 'fr'
Et j'ai eu le résultat voulu.
nassing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h13.


 
 
 
 
Partenaires

Hébergement Web