Page 1 sur 1

Problème de requete

Posté : 15 avr. 2010, 17:28
par VaN
Bonjour,

voici la structure des 2 tables pour la requête qui me pose problème :
CREATE TABLE IF NOT EXISTS `postes` (
  `poste_id` int(11) NOT NULL AUTO_INCREMENT,
  `poste_user_id` int(11) NOT NULL,
  `poste_je_id` int(11) NOT NULL,
  `poste_debut` date NOT NULL,
  `poste_fin` date NOT NULL,
  `poste_statut` tinyint(1) NOT NULL,
  PRIMARY KEY (`poste_id`),
  KEY `poste_user_id` (`poste_user_id`),
  KEY `poste_je_id` (`poste_je_id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=765 ;

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `user_mail` varchar(100) DEFAULT NULL,
  `user_prenom` varchar(50) DEFAULT NULL,
  `user_nom` varchar(50) DEFAULT NULL,
  `user_mobile` varchar(20) DEFAULT NULL,
  `user_statut` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=794 ;
Je souhaite récupérer l'ensemble des users qui ne possèdent que des postes révolus ( donc poste_fin < CURDATE() ), pour un poste_je_id donné.

Voici ma requête actuelle :
"SELECT user_id, user_prenom, user_nom, user_mobile, user_mail, user_statut FROM users, postes
	WHERE poste_user_id = user_id AND poste_fin < CURDATE() AND poste_fin != '0000-00-00' AND poste_je_id = '1' GROUP BY user_id"
Sauf que là, ca va me récupérer tous les utilisateurs qui ont au moins 1 poste révolu, pas les utilisateurs dont TOUS les postes sont révolus.
Comment puis-je faire pour que ma requête englobent tous les postes de chaque utilisateurs ?

Re: Problème de requete

Posté : 15 avr. 2010, 17:43
par stealth35
t'as toujours des problèmes toi :mrgreen:

Re: Problème de requete

Posté : 15 avr. 2010, 18:24
par VaN
Bah oui : p
Je fait du PHP/SQL à longueur de journée, alors de temps en temps, je tombe sur un os : p

Re: Problème de requete

Posté : 15 avr. 2010, 18:29
par stealth35
faudrais que tu fasses un COUNT sur les postes révoluent voir si c'est egale au COUNT du nombre de poste

Re: Problème de requete

Posté : 15 avr. 2010, 19:36
par VaN
faisable en 1 seule requête, ou je dois décomposer ça en deux requêtes distinctes ?

Re: Problème de requete

Posté : 15 avr. 2010, 20:56
par stealth35
faisable en 1 seule requête, ou je dois décomposer ça en deux requêtes distinctes ?
je pense qu'en 1 seule ca doit le faire

Re: Problème de requete

Posté : 16 avr. 2010, 17:29
par VaN
Bon finalement j'ai fait ça en 2 requêtes et 1 boucle, plutôt que de me prendre la tête une heure à trouver comment le faire en une seule :
$membres_anciens = get_array_from_query(sprintf("SELECT user_id, user_prenom, user_nom, user_mobile, user_mail, user_statut, COUNT(poste_id) as postes_finis FROM ".$tables["users"].", ".$tables["postes"]." 
	WHERE poste_user_id = user_id AND poste_fin < CURDATE() AND poste_je_id = '%d' AND poste_fin != '0000-00-00' GROUP BY user_id", $je_id));
	
	foreach($membres_anciens as $key => $membre_ancien) {
		$total_postes = get_value_from_query(sprintf("SELECT COUNT(poste_id) FROM ".$tables["postes"]." WHERE poste_je_id = '%d' AND poste_user_id = '%d'", $je_id, $membre_ancien["user_id"]));
		if($total_postes > $membre_ancien["postes_finis"]) {
			unset($membres_anciens[$key]);
		}
	}
	sort($membres_anciens);

Re: Problème de requete

Posté : 19 avr. 2010, 16:16
par ouckileou
Des requêtes dans une boucle cela doit être un peu looong non ? :)

Pourquoi pas une sous-requête ?
SELECT user_id, user_prenom, user_nom, user_mobile, user_mail, user_statut 
FROM users u
WHERE user_id IN (
	SELECT DISTINCT poste_user_id
	FROM postes
	WHERE poste_fin < CURDATE() 
	AND poste_fin != '0000-00-00'
	AND poste_je_id = XXXX
);