select compliqué sur une table

ViPHP
ViPHP | 1961 Messages

01 janv. 2007, 06:07

Re,
Est-ce possible de conserver ce 4 dans une variable MySQL (@var)???
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

01 janv. 2007, 06:12

Code : Tout sélectionner

SELECT COUNT(DISTINCT cat) FROM lot INTO @var
suivi de

Code : Tout sélectionner

SELECT lotid, COUNT(DISTINCT cat) AS cnt FROM lot GROUP BY lotid HAVING cnt = @var

ViPHP
ViPHP | 1961 Messages

01 janv. 2007, 06:13

Merci Hubert !
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 1885 Messages

01 janv. 2007, 06:17

Hubert, tu lis dans mes pensées.

J'avais justement pensé à comparer le nombre de catégorie dans lesquels les lotid se retrouvaient mais j'avais laissé tombé pour une raison inconnue. :P
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

HD
Mammouth du PHP | 1181 Messages

01 janv. 2007, 18:12

Code : Tout sélectionner

SELECT COUNT(DISTINCT cat) FROM lot INTO @var
suivi de

Code : Tout sélectionner

SELECT lotid, COUNT(DISTINCT cat) AS cnt FROM lot GROUP BY lotid HAVING cnt = @var
Salut et merci à tous pour votre aide
supposons la table suivante :

Code : Tout sélectionner

-- -- Structure de la table `lot` -- CREATE TABLE `lot` ( `id` int(11) NOT NULL auto_increment, `lotid` int(11) NOT NULL default '0', `cat` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; -- -- Contenu de la table `lot` -- INSERT INTO `lot` VALUES (1, 9, 0); INSERT INTO `lot` VALUES (2, 7, 0); INSERT INTO `lot` VALUES (3, 9, 1); INSERT INTO `lot` VALUES (4, 6, 1); INSERT INTO `lot` VALUES (5, 9, 2); INSERT INTO `lot` VALUES (6, 6, 2); INSERT INTO `lot` VALUES (8, 6, 0);
je vais executer le script suivant dessus :
<?
include ("connectbase.php");

$count = "SELECT COUNT(DISTINCT cat) FROM lot INTO @var";
$execCount = mysql_query($count) or die(mysql_error());

$selectCount = "SELECT lotid, COUNT(DISTINCT cat) AS cnt FROM lot GROUP BY lotid HAVING cnt = @var";
$execSelectCount = mysql_query($selectCount) or die(mysql_error());
$dataSelectCount = mysql_fetch_assoc($execSelectCount);

echo "D2BUT <br>";
print_r($dataSelectCount);
echo "<br> FIN";
?>
résultat :
D2BUT
Array ( [lotid] => 6 [cnt] => 3 )
FIN
vous remarquez donc qu'il n'affiche que le lotid 6 alors que le lotid 9 est également correct
j'ai l impression que cette erreur ne vient que de ma (mauvaise :?: :roll: ) gestion des résultats de la 2ème requête SQL...
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

ViPHP
ViPHP | 1961 Messages

01 janv. 2007, 18:22

Bonjour,
Essaie ceci
<?
include ("connectbase.php");

$count = "SELECT COUNT(DISTINCT cat) FROM lot";
$execCount = mysql_query($count) or die(mysql_error());

$nbrCat = mysql_result($execCount, 0, 0);
$selectCount = "SELECT lotid, COUNT(DISTINCT cat) AS cnt FROM lot GROUP BY lotid HAVING cnt = ".$nbrCat;
$execSelectCount = mysql_query($selectCount) or die(mysql_error());
$dataSelectCount = mysql_fetch_assoc($execSelectCount);

echo "D2BUT <br>";
print_r($dataSelectCount);
echo "<br> FIN";
?> 
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

HD
Mammouth du PHP | 1181 Messages

01 janv. 2007, 18:24

même problème :?
D2BUT
Array ( [lotid] => 6 [cnt] => 3 )
FIN
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

01 janv. 2007, 18:32

Ouh la, j'ai bien peur que tu sois bon pour un retour aux tutoriels PHP/MySQL... :roll:

Combien de fois exécutes-tu mysql_fetch_assoc() ? Une seule fois, donc tu récupères une seule ligne. Si tu veux en récupérer plusieurs, tu sais ce qu'il te reste à faire :lol:

HD
Mammouth du PHP | 1181 Messages

01 janv. 2007, 18:35

Ouh la, j'ai bien peur que tu sois bon pour un retour aux tutoriels PHP/MySQL... :roll:

Combien de fois exécutes-tu mysql_fetch_assoc() ? Une seule fois, donc tu récupères une seule ligne. Si tu veux en récupérer plusieurs, tu sais ce qu'il te reste à faire :lol:
:langue: :langue: :langue: :tir2:
je sais !
j'ai l impression que cette erreur ne vient que de ma (mauvaise) gestion des résultats de la 2ème requête SQL...
je suis un phpéiste moi, pas un sqliste :roll:
merci !
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

HD
Mammouth du PHP | 1181 Messages

01 janv. 2007, 18:44

je sèche |*() :cry:
soluce svp :roll:

Rappel du code actuel :
<?
include ("connectbase.php");

$count = "SELECT COUNT(DISTINCT cat) FROM lot INTO @var";
$execCount = mysql_query($count) or die(mysql_error());

$selectCount = "SELECT lotid, COUNT(DISTINCT cat) AS cnt FROM lot GROUP BY lotid HAVING cnt = @var";
$execSelectCount = mysql_query($selectCount) or die(mysql_error());
$dataSelectCount = mysql_fetch_assoc($execSelectCount);

echo "D2BUT <br>";
print_r($dataSelectCount);
echo "<br> FIN";
?> 
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

ViPHP
ViPHP | 1961 Messages

01 janv. 2007, 19:12

Si tu as plusieurs résultats, tu fais simplement une boucle.
<?
include ("connectbase.php");

$count = "SELECT COUNT(DISTINCT cat) FROM lot INTO @var";
$execCount = mysql_query($count) or die(mysql_error());

$selectCount = "SELECT lotid, COUNT(DISTINCT cat) AS cnt FROM lot GROUP BY lotid HAVING cnt = @var";
$execSelectCount = mysql_query($selectCount) or die(mysql_error());
while($dataSelectCount = mysql_fetch_assoc($execSelectCount)){
   $result[] = $dataSelectCount;
}

echo "D2BUT <br>";
print_r($result);
echo "<br> FIN";
?>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

HD
Mammouth du PHP | 1181 Messages

01 janv. 2007, 19:18

J imaginais bien que c'était une boucle sur mysql_fetch_assoc mais j'avais dû mal à imaginer les détails
en tous cas là c'est bon ! merci bcp !!!
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]