Requêtes à tiroir
Posté : 04 juil. 2013, 11:06
Bonjour à tous,
J'utilise des requêtes à tiroir, c'est à dire que j'utilise dans une requête, certaines informations obtenues dans une précédente requête. Tout allait pour le mieux jusqu'à ce que j'ajoute la dernière requête qui aurait normalement dû terminé mon travail, mais elle déconne :
Si je mets des echo, j'obtiens que la première requête est celle-ci :Le résultat consiste en des informations sur des objets, avec un champ id que j'utilise pour la 2e requête qui va être effectuée autant de fois qu'il y a eu de résultat dans ma première requête (c'est normal, c'est ce que je veux qu'elle fasse) :
Si je mets un echo sur la requête et sur le résultat, j'ai la confirmation de ce qui est dis plus haut :
En soit je me moque qu'il n'affiche pas le else, mais cela me cause des problèmes pour la requête d'après.
- Que dois-je changer pour afficher le else lorsque le résultat de ma requête est vide ?
- Comment rendre mon résultat $lol affichable sur une seule ligne ? Mon but étant de le transformer en
Pourquoi est-ce que je souhaite afficher le else ?
Sur la requête d'après, j'utilise le code suivant
Quelqu'un pourrait-il m'aider s'il vous plait ?
Merci à tous
J'utilise des requêtes à tiroir, c'est à dire que j'utilise dans une requête, certaines informations obtenues dans une précédente requête. Tout allait pour le mieux jusqu'à ce que j'ajoute la dernière requête qui aurait normalement dû terminé mon travail, mais elle déconne :
Si je mets des echo, j'obtiens que la première requête est celle-ci :
Code : Tout sélectionner
SELECT * FROM butins_items WHERE zone = 'Gouffre Hurlant' ORDER BY nameLes requêtes en bleu donnent un résultat (le user_id des membres possédant le butins_items considéré), les requêtes en rouge ne renvoient aucun résultat (ce qui est normal car le butins_items considéré n'est possédé par personne).SELECT user_id FROM phpbb_user_items WHERE item_id = 23
SELECT user_id FROM phpbb_user_items WHERE item_id = 6
SELECT user_id FROM user_items WHERE item_id = 7
SELECT user_id FROM user_items WHERE item_id = 12
SELECT user_id FROM user_items WHERE item_id = 15
SELECT user_id FROM user_items WHERE item_id = 18
SELECT user_id FROM user_items WHERE item_id = 17
SELECT user_id FROM user_items WHERE item_id = 14
Si je mets un echo sur la requête et sur le résultat, j'ai la confirmation de ce qui est dis plus haut :
Cela dit, mon 1er problème commence ici. Voici mon code pour cette partieSELECT user_id FROM phpbb_user_items WHERE item_id = 23
2
SELECT user_id FROM phpbb_user_items WHERE item_id = 6
2
10
SELECT user_id FROM phpbb_user_items WHERE item_id = 7
SELECT user_id FROM phpbb_user_items WHERE item_id = 12
SELECT user_id FROM phpbb_user_items WHERE item_id = 15
SELECT user_id FROM phpbb_user_items WHERE item_id = 18
SELECT user_id FROM phpbb_user_items WHERE item_id = 17
10
SELECT user_id FROM phpbb_user_items WHERE item_id = 14
$sql = "SELECT user_id FROM ". USER_ITEMS_TABLE . " WHERE item_id = " . $row2['id'];
echo $sql . '<br />';
if ( !($subresult1 = $db->sql_query($sql)) )
{
message_die(GENERAL_MESSAGE, 'Fatal Error: '.mysqli_error());
}
while( $sub01 = $db->sql_fetchrow($subresult1) )
{
if ($sub01['user_id'] != '')
{
$lol = $sub01['user_id'];
}
else
{
$lol = '0';
}
echo $lol . '<br />';
}
$db->sql_freeresult($subresult1);
Peut importe que je mets if ($sub01['user_id'] != '') if (!empty($sub01['user_id'])) if (isset($sub01['user_id']))Le else n'entre jamais en jeu, alors que l'on sait d'après les echo que j'ai placé avant, que certaine requête ne renvoie aucun résultat.En soit je me moque qu'il n'affiche pas le else, mais cela me cause des problèmes pour la requête d'après.
- Que dois-je changer pour afficher le else lorsque le résultat de ma requête est vide ?
- Comment rendre mon résultat $lol affichable sur une seule ligne ? Mon but étant de le transformer en
"AND user_id != " . $lol
------------------------Pourquoi est-ce que je souhaite afficher le else ?
Sur la requête d'après, j'utilise le code suivant
$sql = "SELECT user_id, username, BLM, WHM, SMN, PLD, MNK, DRG, BRD, WAR, SCH
FROM " . USERS_TABLE . "
$requete01
$lol
ORDER BY username";
echo $sql . '<br />';
if ( !($result01 = $db->sql_query($sql, false, true)) )
{
message_die(GENERAL_MESSAGE, 'Fatal Error: '.mysqli_error());
}
while( $row01 = $db->sql_fetchrow($result01) )
{
$joblist01 .= ( $joblist01 != '' ) ? ', ' . $row01['username'] : $row01['username'];
}
$db->sql_freeresult($result01);Ce qui produit le résultat suivant En bleu, j'ai les résultats attendus. En vers j'ai qu'une moitié du résultat (il ne me parle que du user_id = 10 alors qu'il y a également le user_id = 2 qui devrait être mentionné), en rouge, c'est toutes les fois ou le else devrait intervenir, et ou je ne devrais avoir une valeur vide (j'ai mis 0 plus haut pour afficher quelque chose avec l'echo, mais je veux une valeur vide en vrai). Du coup mes requêtes me donnent un résultat faussé car dans le cas des valeurs en rouge, je ne devrais pas ajouter une condition de plus à la requête, et dans le cas du résultat en vers, il manque une condition...SELECT user_id, username, xxxx FROM users WHERE BRD = 1 AND user_id != 2 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE (MNK = 1 OR BRD = 1) AND user_id != 10 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE DRG = 1 AND user_id != 10 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE PLD = -1 AND user_id != 10 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE PLD = 1 AND user_id != 10 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE PLD = -1 AND user_id != 10 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE PLD = 1 AND user_id != 10 ORDER BY username
SELECT user_id, username, xxxx FROM users WHERE (BLM = 1 OR WHM = 1) AND user_id != 10 ORDER BY username
Quelqu'un pourrait-il m'aider s'il vous plait ?
Merci à tous