Problème avec la foonction count et distinct

Eléphant du PHP | 451 Messages

29 juin 2007, 19:42

Bonjour,

Voila j'ai un script de recherche dans ma base et je voudrais afficher le nombre de résultat trouvé.

Mais cela m'affiche toujours aucun résultat.

Voici mon code:
if (!isset($_GET['total']))
{
$sql = "SELECT COUNT(DISTINCT titre) FROM `".$prefixe."_".$type."` WHERE `titre` LIKE CONVERT(_utf8 '%".addslashes($mot)."%' USING latin1) COLLATE latin1_general_ci";
$p = @mysql_query($sql,$c);
$total = @mysql_result($p,'0','qte');
}
else $total = intval($_GET['total']);

if ($total == 0)
{ 
$result = '- Aucun résultat pour le mot <b>"'.$mot.'"</b>';
} 
elseif($total == 1)
{ 
$result = '- 1 résultat pour le mot <b>"'.$mot.'"</b>';
} 
else 
{
$result = '- '.$total.' résultats pour le mot <b>"'.$mot.'"</b>';
}


J'ai essayé ceci aussi mais le résultat et le même:
if (!isset($_GET['total']))
{
$sql = "SELECT COUNT(*) FROM `".$prefixe."_".$type."` WHERE `titre` LIKE CONVERT(_utf8 '%".addslashes($mot)."%' USING latin1) COLLATE latin1_general_ci";
$p = @mysql_query($sql,$c);
$total = @mysql_result($p,'0','qte');
}
else $total = intval($_GET['total']);

if ($total == 0)
{ 
$result = '- Aucun résultat pour le mot <b>"'.$mot.'"</b>';
} 
elseif($total == 1)
{ 
$result = '- 1 résultat pour le mot <b>"'.$mot.'"</b>';
} 
else 
{
$result = '- '.$total.' résultats pour le mot <b>"'.$mot.'"</b>';
}
Donc voilà si quelqu'un avait une idée.

Merci d'avance.

Eléphant du PHP | 100 Messages

29 juin 2007, 20:29

Avec la clause GROUP BY tu dois pouvoir t'en sortir avec quelques chose de ce genre :

Code : Tout sélectionner

$sql = "SELECT COUNT(*) FROM `".$prefixe."_".$type."` WHERE `titre` LIKE CONVERT(_utf8 '%".addslashes($mot)."%' USING latin1) GROUP BY titre COLLATE latin1_general_ci";
Script gratuit de videothèque: PhpMesFilms
sur http://phpmesfilms.dyndns.org/

Eléphant du PHP | 451 Messages

29 juin 2007, 20:50

Ben cela ne fonctionne pas non plus.

EDIT:

Voilà j'ai trouvé.
if (!isset($_GET['total']))
{
$sql = "SELECT COUNT(*) FROM `".$prefixe."_".$type."` WHERE `titre` LIKE CONVERT(_utf8 '%".addslashes($mot)."%' USING latin1) COLLATE latin1_general_ci ORDER By titre";
$p = mysql_query($sql,$c);
$total = mysql_result($p, 0);
}
else $total = intval($_GET['total']);

if ($total == 0)
{ 
$result = '- Aucun résultat pour le mot <b>"'.$mot.'"</b>';
} 
elseif($total == 1)
{ 
$result = '- 1 résultat pour le mot <b>"'.$mot.'"</b>';
} 
else 
{
$result = '- '.$total.' résultats pour le mot <b>"'.$mot.'"</b>';
}

J'ai mit ça
$p = mysql_query($sql,$c);
$total = mysql_result($p, 0);
A la place de ça
$p = @mysql_query($sql,$c);
$total = @mysql_result($p,'0','qte');

En faites les "@" et le "mysql_result($p,'0','qte')" empêchait l'éxécution de la requète.


Mais une question.

Vaut-il mieux utiliser ce type de requète?
$sql = "SELECT COUNT(*) FROM `".$prefixe."_".$type."` WHERE `titre` LIKE CONVERT(_utf8 '%".addslashes($mot)."%' USING latin1) COLLATE latin1_general_ci ORDER By titre";
Ou alors celle-ci?
$sql = "SELECT COUNT(*) FROM `".$prefixe."_".$type."` WHERE `titre` LIKE '%".addslashes($mot)."%' ORDER By titre";