[RESOLU] find_in_set dans db avec while et if

Petit nouveau ! | 3 Messages

15 mars 2017, 21:02

Bonjour à tous,

Je voudrais pouvoir utiliser un while avec un if pour afficher le résultat provenant d'une requete avec find_in_set.

ex:

J'ai une TABLE_PLACE:
valeur A1,A2,A3,A4,A5;

j'ai une liste de places :
$place_in = (A1,A2);

je fais ma requete:
select places from TABLE_PLACE where find_in_set(places, '".$place_in."') order by places asc

J'affiche les résultat avec
while{
echo places A1;
echo places A2;
}

Jusque là tout va bien,
mais je voudrait faire afficher également l'inverse:

ex:

if (find_in_set){
places trouvées:
echo places A1;
echo places A2;
}else{
places non trouvées:
echo places A3;
echo places A4;
echo places A5;
}

Mais je galère à trouver une bonne formule;
J'ai regardé aussi du coté de "IN", "LOCATE", "ARRAY" mais je m'y perd.

Peut être que quelqu'un pourra m'orienter.

Merci

Hugo

Mammouth du PHP | 1205 Messages

16 mars 2017, 10:28

Je connaissais pas find_in_set mais je pense que la syntax IN et NOT IN serait plus indiquée dans un WHERE.

Par contre je ne comprends pas si les places non trouvées doivent être celle de la tables qui ne sont pas cherché ou celle de ton tableaux qui ne sont pas dans la tables.

dans le premier cas une 2eme requète avec NOT IN suffit
sinon ton find_in_set te sera utile dans ton SELECT
select places, find_in_set(places, '".$place_in."') AS find from TABLE_PLACE where places IN ".$place_in." order by places asc
tu pourra alors tester l'index find de tes résultat si c'est 0 il n'est pas trouvé si > 0 trouvé

Petit nouveau ! | 3 Messages

16 mars 2017, 19:31

Merci pour cette info ;)
J'ai testé avec les in et not in mais idem.
Ne m'en sortant pas, j'ai modifié ma formule pour faire plus simple sur le principe.

test de base :
je fais ma requete et j'appelle toute la table.
select places from TABLE_PLACE order by places asc

J'affiche les résultat (simple) :
while{
echo places;
}

et maintenant je modifie le résultat avec un array :

$place_in2 = array("5C", "4D", "9B", "9C"); // liste tapée à la main

while{
if(in_array(places, $place_in2)){
$result = 'oui';
}else{
$result = 'non';
}
echo places.$result;
}

Ca, ça marche quand la liste est tapée à la main.


Mais si j'importe ma liste depuis la base de données, ça bug.

$place_in = liste importée de la db
quand je fais un echo $place_in j'ai bien le résultat "5C", "4D", "9B", "9C"

donc pour:
$place_in2 = array($place_in);
sur le principe cela devrait être équivalent à :
$place_in2 = array("5C", "4D", "9B", "9C");

while{
if(in_array(places, $place_in2)){
$result = 'oui';
}else{
$result = 'non';
}
echo places.$result;
}
Et ça, ça marche pas alors que ma liste tapée et importée sont identiques.

RRRRRRRRRR

Soit j'ai zappé quelque chose, soit le array ne prend pas en compte la formule d'import de la liste.

Si vous avez d'autres infos pour m'orienter je suis preneur.
Merci à tous et à Spols.

Hugo

Mammouth du PHP | 1205 Messages

16 mars 2017, 20:08

pas simple à comprendre ton pseudo code
mais
donc pour:
$place_in2 = array($place_in);
sur le principe cela devrait être équivalent à :
$place_in2 = array("5C", "4D", "9B", "9C");
Non ca ne marche pas comme cela
il te faut créer un tableaux php mais avec ce que tu nous donne rien ne peux marcher des $ oubliés, des where sans clause, ...

donne nous du vrai code (entre balise bbcode) si tu veux qu'on t'aide

Petit nouveau ! | 3 Messages

20 mars 2017, 12:26

Bonjour,

Un MERCI à Spols qui a pris le temps de se pencher sur mon problème.

N'arrivant pas à mes fins, j'ai réglé le problème en réécrivant mon code en javascript.

Sujet fermé.
Merci