PHP mixer deux tableaux

WRInaute passionné
Bonjour,

Je souhaite savoir si il est possible de faire cela et si oui comment.

- Je récupère les messages du visiteur 1.
- Je récupère les messages du visiteur 4.
- Je classe ensuite leurs messages selon leur id.

Donc je vais avoir un premier tableau, puis un deuxième et ensuite je dois les mélanger et en reclasser les tuples selon leur id.


On peut faire ça :?: Si oui comment :?:


Merci d'avance :D
 
WRInaute passionné
Salut UsagiYojimbo :D

Le truc c'est que c'est avec mysql, alors j'ai un peu de mal pour le script.

En gros, ça donnerait ça :?:
Code:
$A="SELECT message FROM membre WHERE idMembre=1 ORDER BY id";
$A= mysql_query("$A");
$A=mysql_fetch_array($A); 


$R="SELECT message FROM membre WHERE idMembre=4 ORDER BY id";
$R= mysql_query("$R");
$R=mysql_fetch_array($R); 

$tableau_final= array_merge ($A, $R);

C'est ça :?:

Mais là, comment je fais pour avoir le classement par ID des tuples de l'ensemble des deux tableaux :?:

Et comment je fais pour afficher le tout avec ma fonction while() maintenant :?:
 
WRInaute accro
En fait y'a moyen de faire ça avec un seul ordre sql, et sans passer par des fonctions php supplémentaires (si je comprends ce que tu veux faire).

Le but est d'avoir la liste finale trié par id message ou id_membre ?

Par idMembre puis id de message :
Code:
$sql = "SELECT message FROM membre WHERE idMembre=1 AND idMembre=4 ORDER BY idMembre,id";
$res = mysql_query($sql);
$row = mysql_fetch_array($res))

Par id de message :
Code:
$sql = "SELECT message FROM membre WHERE idMembre=1 AND idMembre=4 ORDER BY id";
$res = mysql_query($sql);
$row = mysql_fetch_array($res))

Mais pour avoir l'ensemble des message il va te falloir parcourir ton resultset (ceci dans les deux cas).
 
WRInaute passionné
Oui ça a l'air bien.

Le problème c'est que je sais pas à l'avance combien je vais avoir de tableau à récupérer.

Peut-être les messages pour 4 ou 8 ou 11 membres...

Donc je pensais faire une boucle récupérant chaque fois un tableau.

Puis les mixer ensemble.

Avec ta dernière solution, ça va pas parce que je ne peux pas construire la requête comme ça, sauf erreur de ma part.
 
WRInaute accro
Meeuuuhhh a dit:
Oui ça a l'air bien.

Le problème c'est que je sais pas à l'avance combien je vais avoir de tableau à récupérer.

Peut-être les messages pour 4 ou 8 ou 11 membres...

Donc je pensais faire une boucle récupérant chaque fois un tableau.

Puis les mixer ensemble.

Avec ta dernière solution, ça va pas parce que je ne peux pas construire la requête comme ça, sauf erreur de ma part.

Si tu connais les id_membre pour lesquels tu veux récupérer les messages, l'idée en ce cas est de les stocker dans une variable intermédiaire, qui sera constituée de la liste des idMembre, et de faire un WHERE IN :

Code:
$liste_mbr = "1,2,45,22,15,16";
$sql = "SELECT message FROM membre WHERE idMembre IN (".$liste_mbr.") ORDER BY id";
$res = mysql_query($sql);
$row = mysql_fetch_array($res))
 
WRInaute passionné
Ca à l'air de bien fonctionner !

Là je n'ai fait que tester, c'est pas encore dans la page, mais ça donne le bon résultat.

J'espère que je n'aurais pas à faire remonter le topic.


Un grand merci à toi UsagiYojimbo :)

( C'est du japonais ? ça veut dire quoi ? )
 
WRInaute passionné
Bah si, je dois faire remonter le topic finalement :roll: :lol:

En fait, je ne sais pas comment récupérer un tableau via une requête, de manière à pouvoir ensuite m'en servir dans la suivante...

Ca c'est le code :

Code:
$a="SELECT idTel FROM mixe WHERE idTelPrincipal='".$id."' ";
$b=mysql_query("$a");

$R=array($b); <- ICI COMMENT JE RECUPERE LE TABLEAU POUR L'UTILISER EN DESSOUS ???

//on va chercher les titres des messages 
$a="SELECT id,titre FROM message WHERE idTel IN (".$R.")  ORDER BY id ";
$b=mysql_query("$a");
while ($R=mysql_fetch_array($b)) <- ICI C'EST LA LIGNE 112 DU CODE D'ERREUR

Et donc là j'obtiens ça :roll:

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home.10.13/site/scripts/repertoire/mixer.php on line 112
 
WRInaute discret
Remplace ton
Code:
$R=array($b);
par
Code:
$R = array();
while ($data = mysql_fetch_row($b))
     $R = $data[0].',' ;

$R = substr($data[0], 0, -1) ;
 
WRInaute passionné
Ca ne fonctionne pas, j'ai le même code d'erreur.

J'ai essayé ça :

Code:
$tabRes=array(); 
while($R=mysql_fetch_array($b))
{
  $tabRes[] = $R['idTel'];
}

avec $tabRes[] dans la condition WHERE de la deuxième requête, mais j'obtiens ça :

Code:
Fatal error: Cannot use [] for reading in /home.10.13/site/scripts/repertoire/mixer.php on line 114
 
WRInaute discret
Moi j'aurais fais ça :

Code:
$a="SELECT idTel FROM mixe WHERE idTelPrincipal='".$id."' ";
$b=mysql_query("$a");

// On récupére le premier élement
$R=mysql_fetch_row($b);
$tab_id = '';
$tab_id = $R[0];

// Les autres lignes
while ($R=mysql_fetch_array($b)) {
   $tab_id .= ',' . $R[0];
}

//on va chercher les titres des messages
$a="SELECT id,titre FROM message WHERE idTel IN (".$tab_id.")  ORDER BY id ";
$b=mysql_query("$a");
while ($R=mysql_fetch_array($b)){
// Ton code...
}
 
WRInaute accro
DreamJap a dit:
Moi j'aurais fais ça :

Code:
$a="SELECT idTel FROM mixe WHERE idTelPrincipal='".$id."' ";
$b=mysql_query("$a");

// On récupére le premier élement
$R=mysql_fetch_row($b);
$tab_id = '';
$tab_id = $R[0];

// Les autres lignes
while ($R=mysql_fetch_array($b)) {
   $tab_id .= ',' . $R[0];
}

//on va chercher les titres des messages
$a="SELECT id,titre FROM message WHERE idTel IN (".$tab_id.")  ORDER BY id ";
$b=mysql_query("$a");
while ($R=mysql_fetch_array($b)){
// Ton code...
}

Pourquoi récupérer le premier élément du résultset indépendamment des autres lignes ?

Code:
$sql = "SELECT idTel FROM mixe WHERE idTelPrincipal='".$id."' ";
$res = mysql_query("$a");

$tab_id = '';

//on récupère tous les éléments
while ($row = mysql_fetch_array($sql)) {
   $tab_id .= ',' . $row['idTel'];
}

$tab_id = substr($tab_id,1);

//on va chercher les titres des messages
$a="SELECT id,titre FROM message WHERE idTel IN (".$tab_id.")  ORDER BY id ";
$b=mysql_query("$a");
while ($R=mysql_fetch_array($b)){
// Ton code...
}

Edit : en donnant ma version j'ai compris le pourquoi du traitement en deux temps. Pas très optimisé je pense.
 
WRInaute passionné
Bon ça fonctionne, j'ai fait comme ça :
Code:
$r="
SELECT * FROM messages WHERE idTel IN ( SELECT idTelMix FROM mixer WHERE idTelPrincipal='".$canal."' AND idMembre='".$membre."') OR idTel='".$canal."' ORDER BY id ";
$b = mysql_query("$affiche");
 // On cré une structure adapté pour récupérer le contenu du recordset
$tab=array(
  "id"  => array(),
  "texte" => array()
  ); 

 // On transvide ton recordset dans la structure précédement créée
while($R=mysql_fetch_array($b))
{

  array_push($tab['id'],$R['id']);
  array_push($tab['texte'],$R['texte']);
}
 
for ($i=0 ;$i<count($tab['id']);$i++)
{


Merci à tous pour votre aide


:D
 
Discussions similaires
Haut