Problème de requete

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 : Problème de requete

Re: Problème de requete

par ouckileou » 19 avr. 2010, 16:16

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
);

Re: Problème de requete

par VaN » 16 avr. 2010, 17:29

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

par stealth35 » 15 avr. 2010, 20:56

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

par VaN » 15 avr. 2010, 19:36

faisable en 1 seule requête, ou je dois décomposer ça en deux requêtes distinctes ?

Re: Problème de requete

par stealth35 » 15 avr. 2010, 18:29

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

par VaN » 15 avr. 2010, 18:24

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

par stealth35 » 15 avr. 2010, 17:43

t'as toujours des problèmes toi :mrgreen:

Problème de requete

par VaN » 15 avr. 2010, 17:28

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 ?