IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème requête de sélection d'id par lieu


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de mLk92
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 527
    Points : 305
    Points
    305
    Par défaut Problème requête de sélection d'id par lieu
    Hi all !

    Je suis en train de faire une galerie de schémas rangé par lieu de ses schémas, pour choisir un lieu, on dispose d'un select qui va afficher les miniatures lorsque le choix est effectué, jusqu'ici tout va bien.

    Le problème s'effectue à l'affichage de l'image, lorsque l'on clique sur une miniature, l'image doit s'afficher sur une nouvelle page, avec le précédent ou suivant selon l'id de l'image.

    Et mon problème de requête se situe ici, c'est que dans la table "schémas" les images sont trié par lieu, c'est a dire qu'un lieu peut avoir des schémas dont les id peuvent etre 2-5-8-14-25. Et je ne trouve pas la requête qui me permettrai de sélectionné seulement les id d'image correspondant a tel ou tel lieu.

    si vous avez une idée

    Merci pour vos réponses

    P.s: vous inquiété pas, je cherche ossi de mon coté !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut,

    j'ignore si j'ai bien compris la problématique.

    Si c'est si simple que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $q = "SELECT id_image FROM shemas WHERE lieu =".$lieu_donne." 
    AND id_image>".$id_actuel." ORDER BY id_image ASC LIMIT 1";
    ca c'est pour la PROCHAINE du même lieu si tu conais l'image actuelle et le lieu, (la plus petite des id_image supérieur a l'id actuel pour un même lieu)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $q = "SELECT id_image FROM shemas WHERE lieu =".$lieu_donne." 
    AND id_image<".$id_actuel." ORDER BY id_image DESC LIMIT 1";
    ca c'est pour la PRECEDENTE du même lieu si tu conais l'image actuelle et le lieu (la plus grande des id_image < l'id actuel, pour le même lieu)




    A moins que, plus complexe, si n'ayant que l'id_image courant comme info tu souhaite remonter la précédente id_image ou la prochaine mais toujours d'un même lieu, dans ce cas le lieu est tout de même récupérable).

    Dans ce cas une auto-jointure par le lieu me semble tout indiquée.
    pour la précédente image du même lieu que l'image actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT s1.id_image FROM shemas s1 JOIN shemas s2 USING(lieu)
    WHERE s2.image=id_actuel
    AND s1.image < id_actuel
    ORDER BY s1.id_actuel DESC limit 1
    Imagine ta table dédoublée en 2 tables que tu joins.
    en gros grace s2 tu remonte l'image actuelle et surtou son son lieu.
    ensuite ca te permet de faire la jointure avec s1 sur le lieu
    a savoir qu'avec s1 tu remonte toutes les id_image du bon lieu (celui trouvé par s2)
    Mais comme tu veux que la précédente, par rapport a l'id_image actuel tu ne retiends que les id inférieurs a l'id_actuel
    et tu les classe par ordre descendant limit 1.

    l'éqivalent pour trouver la suivante d'un même lieu c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT s1.id_image FROM shemas s1 JOIN shemas s2 USING(lieu)
    WHERE s2.image=id_actuel
    AND s1.image > id_actuel
    ORDER BY s1.id_actuel ASC limit 1

  3. #3
    Membre averti Avatar de mLk92
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 527
    Points : 305
    Points
    305
    Par défaut
    Ok, mais n'y a-t-il pas une requête plus simple juste pour prendre toutes les id d'images appartenant au lieu choisi ?

    Sans avoir besoin de faire une requête pour celle d'avant et une autre pour celle d'après.

    G fait ce style de galerie pour un endroit, et pour mettre précédent et suivant, je fai un mysql_num_rows pour avoir le dernier id, ensuite je fai une boucle if et elseif pour voir si l'id actuel est le premier, le dernier ou o milieu et ainsi mettre suivant, précédent ou les deux

    Et là je voudrais pouvoir avoir l'id max, l'id min et ceux entre min et max ,des id concernant un lieu

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut,

    bah si c'est que çà ...
    si tu connais le lieu ($lieu_connu):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $q = "SELECT id_image FROM shemas WHERE lieu =".$lieu_connu;
    Si tu ne connais que l'id_image actuel (sans son lieu) et que tu veux faire remonter toutes les images du même lieu que cette image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT s1.id_image FROM shemas s1 JOIN shemas s2 USING(lieu)
    WHERE s2.image=".$id_actuel

    voila dans les 2 cas tu peux remonter toutes les images du bon lieu.

  5. #5
    Membre averti Avatar de mLk92
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 527
    Points : 305
    Points
    305
    Par défaut
    j'ai une requête du meme type que la premiere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$req="SELECT id_schemas FROM schemas WHERE station = '".$_GET['station']."'"; 
    	$result=mysql_query($req)or die("Erreur dans la base de donnée, consulté l'administrateur");
    ca me prend effectivement bien les plans par stations et cela quelque soit l'id du schémas, Et pour avoir l'id min et l'id max de chacun des lieux comment dois-je faire ?

    un truc du style ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //requete du min, max
    $req="SELECT MIN(id_schemas) as idMin, MAX(id_schemas) as idMax FROM schemas WHERE station = '".$_GET['station']."'";
    Merci pour les réponses !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Impossible !
    dans une même requete impossible, de faire marcher ces 2 fonctions d'agrégation.
    Ou alors superpose les en 2 requetes grace a UNION.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //requete du min, max
    $req="SELECT MIN(id_schemas) as 'ID' FROM schemas 
    WHERE station = '".$_GET['station']."'
    UNION
    SELECT MAX(id_schemas) as 'ID' FROM schemas 
    WHERE station = '".$_GET['station']."'";
    un premier $row = mysql_fetch_row($result) te donnera le min ($min = $row[0]),

    et un 2 eme $row = mysql_fetch_row($result) te donnera le max ($max = $row[0]).

    Ceci dit, tu peux déja chopper ces valeurs des le premier jeu enregistrement sur ta première requete, sans requete suplémentaire a condition de les ranger par ordre croissant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    $req="SELECT id_schemas FROM schemas WHERE station = '".$_GET['station']."' 
    ORDER BY id_shemas ASC"; 
    $result=mysql_query($req)or die("Erreur");
    $nb = mysql_num_rows($result);//compte les resultats
    if($nb > 1)
    {
    	$data = mysql_fetch_row($result);
    	$min = $data[0];
    	mysql_data_seek($result, $nb - 1);//cale le pointeur sur le dernier
    	$data = mysql_fetch_row($result);
    	$max = $data[0];
    	mysql_data_seek($result, 0);//recale le pointeur au début pour la suite
    }
    else
    {
    	if($data = mysql_fetch_row($result))
    	{
    		//cas 1 seul enregistrement retournée
    		$min = $data[0];
    		$max = $data[0];
    		//recale le pointeur au début pour la suite
                             mysql_data_seek($result, 0);
    	}
    }
    Voila, a ce stade tu as $min et $max renseignés (sauf si pas de retour bien sur), et le pointeur est recalé au début du jeu d'enregistrements pour que tu puisse continuer sans te soucier de rien.

Discussions similaires

  1. [XL-2003] Problème sur une sélection puis séparation par une ligne blanche
    Par korni184 dans le forum Excel
    Réponses: 12
    Dernier message: 08/04/2010, 11h45
  2. Réponses: 1
    Dernier message: 31/05/2009, 15h25
  3. [SQL]Problème requête sélection
    Par ThieBEN dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/04/2007, 16h04
  4. Requête avec sélection sur MAX et Rupture par Service
    Par Kmiecik Sigismond dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/04/2006, 14h00
  5. [conception] Requête de sélection problèmes de relations
    Par snoopy69 dans le forum Modélisation
    Réponses: 26
    Dernier message: 08/11/2005, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo