PHP mixer deux tableaux
13 messages
• Page 1 sur 1
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
PHP mixer deux tableaux
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
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
Merci d'avance
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
Salut UsagiYojimbo
Le truc c'est que c'est avec mysql, alors j'ai un peu de mal pour le script.
En gros, ça donnerait ça
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
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: Tout sélectionner
$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
-

UsagiYojimbo - WRInaute accro

- Messages: 8576
- Inscription: 23 Nov 2005
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 :
Par id de message :
Mais pour avoir l'ensemble des message il va te falloir parcourir ton resultset (ceci dans les deux cas).
Le but est d'avoir la liste finale trié par id message ou id_membre ?
Par idMembre puis id de message :
- Code: Tout sélectionner
$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: Tout sélectionner
$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).
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
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.
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.
-

UsagiYojimbo - WRInaute accro

- Messages: 8576
- Inscription: 23 Nov 2005
Meeuuuhhh a écrit: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: Tout sélectionner
$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))
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
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 ? )
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 ? )
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
Bah si, je dois faire remonter le topic finalement
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 :
Et donc là j'obtiens ça
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: Tout sélectionner
$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
- Code: Tout sélectionner
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
-

Elvis - WRInaute discret

- Messages: 114
- Inscription: 20 Mai 2005
Remplace ton
par
- Code: Tout sélectionner
$R=array($b);
par
- Code: Tout sélectionner
$R = array();
while ($data = mysql_fetch_row($b))
$R = $data[0].',' ;
$R = substr($data[0], 0, -1) ;
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
Ca ne fonctionne pas, j'ai le même code d'erreur.
J'ai essayé ça :
avec $tabRes[] dans la condition WHERE de la deuxième requête, mais j'obtiens ça :
J'ai essayé ça :
- Code: Tout sélectionner
$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: Tout sélectionner
Fatal error: Cannot use [] for reading in /home.10.13/site/scripts/repertoire/mixer.php on line 114
-

DreamJap - WRInaute discret

- Messages: 114
- Inscription: 6 Mai 2005
Moi j'aurais fais ça :
- Code: Tout sélectionner
$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...
}
-

UsagiYojimbo - WRInaute accro

- Messages: 8576
- Inscription: 23 Nov 2005
DreamJap a écrit:Moi j'aurais fais ça :
- Code: Tout sélectionner
$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: Tout sélectionner
$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.
-

Meeuuuhhh - WRInaute passionné

- Messages: 2046
- Inscription: 8 Jan 2007
Bon ça fonctionne, j'ai fait comme ça :
Merci à tous pour votre aide

- Code: Tout sélectionner
$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
13 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- liste de tableaux de tableaux en php
- PHP tableaux multidimensionnels
- [PHP] trier 2 tableaux
- Tableaux a plusieurs dimension en PHP
- Tris PHP sur tableaux multidimensionnels
- Mixer chiffres et lettres
- mixer plusieurs flux xml
- Mixer des flux RSS
- Comment mixer plusieurs flux rss
- Logiciel pour mixer des vidéos et de la musique
Consultez la description détaillée des produits ou services de Google suivants : Google Reader Trends
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
