JeuWeb - Crée ton jeu par navigateur
Requete avec plusieurs contraintes - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Requete avec plusieurs contraintes (/showthread.php?tid=7211)

Pages : 1 2 3


RE: Requete avec plusieurs contraintes - hercull - 13-06-2014

Non pas de table contenant tous les noms de categorie


RE: Requete avec plusieurs contraintes - Arnadus - 13-06-2014

Bon bha, je sais pas où tu stockes les noms de tes catégories mais, comme le dit Xenos, il va falloir pré-remplir ton tableau avec le nom de ces catégories.


RE: Requete avec plusieurs contraintes - hercull - 19-06-2014

Re,

je dois faire cette requête pour chacune des catégorie (12):

Code :
Select *FROM forum_auteur WHERE correspondance_sujet = 1
Select *FROM forum_auteur WHERE correspondance_sujet = 2
Select *FROM forum_auteur WHERE correspondance_sujet = 3


Y a t il un moyen pour faire cela une seul requête et récupérer les résultats de la même manière que si j'avait fais ces 12 requête?

Car 12 requête me semble assez lourd.

Je précise que j'affiche dans un tableau fixe donc impossibilité d'afficher dans une boucle tous les résultats, je dois les afficher en dehors de la boucle.


RE: Requete avec plusieurs contraintes - Ter Rowan - 19-06-2014

order by ?


ou bien je ne comprends pas le besoin


RE: Requete avec plusieurs contraintes - Xenos - 19-06-2014

Rien ne t'empêche, dans une boucle, de stocker les résultats (dans une variable), et de ne les afficher que plus tard.

Comme dit Ter Rowan, il me semble qu'une seule requête sélectionnant tout (en l'ordonnant), suivie d'un tri dans le PHP sera plus appropriée...


Sinon, dans le genre bien pesant avec des gros sabots mais qui semble répondre à la demande, j'ai:

// $mysqli = new mysqli('IP', 'user', 'password', 'db');
// On va considérer que $mysqli est l'objet MySQLi en charge des requêtes sur la DB
// Si ce n'est pas mysqli qui est utilisé, il faudra adapter le
// $mysqli->query()

$categoriesIndex = range(1,12);
$resultats = array();
foreach ($categoriesIndex as $index)
{
$resultats[$index] = $mysqli->query('SELECT * FROM `forum_auteur` WHERE `correspondance_sujet`='.(int)$index);
}

// $resultats contient 12 éléments, correspondant aux 12 catégories,
// chacun de ces élément étant l'ensemble des réponses de la requête
// pour la catégorie correspondante
// aka:
// $resultats_i = resultatsDeLaRequetePourLaCategorie_i
var_dump($resultats);

Testé et validé.
Je crois que je n'avais pas refait de requête aussi violente depuis eclerd XD



Après, de faire générale, UNION ALL|DISTINCT permet de faire des fusions de résultats de requêtes MySQL:


$categoriesIndex = range(1,12);
$categoriesRequetes = array_map(
function ($p_v)
{
return ('(SELECT * FROM `forum_auteur` WHERE `correspondance_sujet`='.(int)$p_v.')');
}, $categoriesIndex);
$requete = implode(' UNION ALL ', $categoriesRequetes);

$allResults = $mysqli->query($requete);

Mais là, $allResults n'est pas un tableau de 12 MySQLiResult: c'est directement le MySQLiResult correspondant aux 12 requêtes fusionnées.


RE: Requete avec plusieurs contraintes - Arnadus - 19-06-2014

(19-06-2014, 03:49 PM)hercull a écrit : Re,

je dois faire cette requête pour chacune des catégorie (12):

Code :
Select *FROM forum_auteur WHERE correspondance_sujet = 1
Select *FROM forum_auteur WHERE correspondance_sujet = 2
Select *FROM forum_auteur WHERE correspondance_sujet = 3


Y a t il un moyen pour faire cela une seul requête et récupérer les résultats de la même manière que si j'avait fais ces 12 requête?

Car 12 requête me semble assez lourd.

Je précise que j'affiche dans un tableau fixe donc impossibilité d'afficher dans une boucle tous les résultats, je dois les afficher en dehors de la boucle.


Tout simplement:



Select * FROM forum_auteur
WHERE
correspondance_sujet = 1 OR
correspondance_sujet = 2 OR
correspondance_sujet = 3


?


RE: Requete avec plusieurs contraintes - Harparine - 19-06-2014

SELECT *
FROM forum_auteur
WHERE correspondance_sujet IN ( 1,2,3,4,...,12)
@+


RE: Requete avec plusieurs contraintes - Xenos - 19-06-2014


SELECT *
FROM `forum_auteur`
WHERE `correspondance_sujet` BETWEEN 1 AND 12

Allez, on se fait toutes les variantes possibles? Smile


RE: Requete avec plusieurs contraintes - Harparine - 19-06-2014

+1 pour les quotes que j'ai oubliées Smile


RE: Requete avec plusieurs contraintes - hercull - 20-06-2014

Merci pour vos réponses ,

Mais dans toutes ces requêtes proposés comment récupérer les résultats pour les stocker en variables et pouvoir les afficher en dehors de la boucle ( et à l’intérieur aussi de la boucle j'aimerai savoir comment il faut procéder car je ne sais pas si ma façon de faire est la bonne ou la plus optimisé)?

Xenos comment faire ce que tu propose au dessus :" Rien ne t'empêche, dans une boucle, de stocker les résultats (dans une variable), et de ne les afficher que plus tard. " ?

PS: Xenos je n'utilise malheureusement pas encore mysqli mais uniquement mysql et d'une façon procédurale.