[Résolu] Utiliser in_array avec mysql_fetch_array

Utiliser in_array avec mysql_fetch_array [Résolu] - PHP - Programmation

Marsh Posté le 17-08-2006 à 11:47:13    

Bonjour,
 
J'ai une requête SQL qui me crée un tableau avec des doublons et je voudrais utiliser in_array pour les enlever (SELECT DISTINCT est inefficace, car ma requête est un peu complexe...)
 
Ma syntaxe suivante ne marche pas:
 

Code :
  1. $tab=mysql_fetch_array($rech);
  2. while ($nb<=mysql_num_rows($rech_tmp)) {
  3.        $tmp=mysql_fetch_array($rech_tmp);
  4.        if (! in_array($tmp['Nom'],$tab))
  5.                 $tab=mysql_fetch_array($rech);
  6. $nb++;
  7. }


 
Ce que le code est censé faire:
$tmp reçoit les valeurs de rech_tmp et compare la dernière valeur à ce que contient déjà $tab. Si $tab ne contient pas encore la valeur on relance la requête.
 
PB:  
- Je n'arrive pas à rechercher la valeur dans $tab avec in_array
- Vous allez aussi me dire que je lance 3 fois un mysql_fetch_array...je sais ça prend des ressources, mais j'ai pas trouvé mieux...c'est possible de faire tout ceci avec 1 seul fetch_array?
 
Merci de votre aide.


Message édité par PedroBD le 17-08-2006 à 13:47:56
Reply

Marsh Posté le 17-08-2006 à 11:47:13   

Reply

Marsh Posté le 17-08-2006 à 11:54:59    

pourquoi tu utilise un coup $rech et un autre coup $rech_tmp ??

Reply

Marsh Posté le 17-08-2006 à 11:58:55    

T'as raison, c'est pas utile. Mais tu sais comment utiliser in_array dans mon cas?

Reply

Marsh Posté le 17-08-2006 à 12:19:17    

alors question 1, pourquoi tu dis que la requête est un peu complexe? A mon avis tu aurais quand même plus vite fait de faire ça en SQL !!!
 
question2: qu'est ce que tu espères faire avec ceux que tu trouves? La tu fais juste un test pour savoir s'il est dans les suivants mais bon...
 
question3: tu te rends bien compte que si j'ai par exemple


1 A
2 B
3 C
4 A
5 C


Et que je cherche les doublons ton truc va faire:
- 1er element: 'A' je regarde si je le trouve dans les suivants
- je dépile mes résultats 2 B, c'est pas bon
- je dépile mes résultats 3 C, c'est pas bon
- je dépile mes résultats 4 A, c'est bon. Y'a doublon!
- je passe a la ligne suivante,je depile et j'ai 5C. C'est le dernier, je m'arrête.
Ce qui doit être très loin du résultat escompté, vu que C était bien en doublons.

Reply

Marsh Posté le 17-08-2006 à 13:15:36    

OK, t'as raison, je vais chercher le bon algo. Le seul truc que je voudrais pour l'instant, c'est connaître la synthaxe pour utiliser in_array après un mysql_fetch_array.
 
Pour ce qui est de la requête, j'ai pas mal d'INNER JOIN et j'ai des tables intermédiaires dans lesquelles je peux avoir plusieurs fois les mêmes valeurs. J'ai déjà essayé de mettre HAVING ou GROUP BY, mais ça fait rien de mieux.
Pour l'instant je pense quand même que le plus simple est de supprimer les doublons de ma requête finale en utilisant in_array.
 
En gros, si un truc comme:
 
if (in_array($tmp['Nom']),$tab)
 
Merci de vos réponses.

Reply

Marsh Posté le 17-08-2006 à 13:28:33    

PedroBD a écrit :

OK, t'as raison, je vais chercher le bon algo. Le seul truc que je voudrais pour l'instant, c'est connaître la synthaxe pour utiliser in_array après un mysql_fetch_array.


bin la syntaxe de ton truc est correct, c'est juste que tu en fais n'importe quoi [:spamafote]
 

PedroBD a écrit :

Pour ce qui est de la requête, j'ai pas mal d'INNER JOIN et j'ai des tables intermédiaires dans lesquelles je peux avoir plusieurs fois les mêmes valeurs. J'ai déjà essayé de mettre HAVING ou GROUP BY, mais ça fait rien de mieux.


C'était la bonne voie ...

PedroBD a écrit :

Pour l'instant je pense quand même que le plus simple est de supprimer les doublons de ma requête finale en utilisant in_array.


Je continue a penser que non, surtout avec le code que tu as donné [:spamafote]
 

Reply

Marsh Posté le 17-08-2006 à 13:44:30    

Je continue a penser que non, surtout avec le code que tu as donné [:spamafote][/quotemsg]
 
OK, j'ai trouvé avec in_array et mysql_fetch_array. Je pense que ça peut intéresser alors voici le code que j'ai écrit:
 

Code :
  1. //Tant qu'on trouve des lignes
  2. while ($tmp=mysql_fetch_array($rech)) {
  3.   //Création d'un tableau temporaire   
  4.   if (!in_array ($tmp['Nom'],$tabtmp)) {
  5.      
  6.      $tabtmp[$i]=$tmp['Nom'];
  7.     //Stockage de la valeur à afficher s'il ne s'agit pas d'un doublon
  8.      $aff=$tmp;
  9.  
  10.    $i++;
  11.   } //Fin du if
  12. } //Fin du while


 
Je pense qu'on peut faire encore plus simple, sans passer par un $tmp, et en supprimant la ligne de $aff si c'est un doublon, mais bon ça marche comme ça...
 
Merci de votre aide.


Message édité par PedroBD le 17-08-2006 à 13:45:01
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed