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 :

requetes imbriquées + rand() [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut requetes imbriquées + rand()
    Bonjour,

    j'ai quelques soucis dans l'utilisation des requêtes SQL

    j'ai une première table ou je stock les information d'utilisateurs
    (u.id, u.nom, u.choix_image, u.adresse, etc...)
    une seconde table ou je stock les informations d'images des utilisateurs
    (i.id, i.id_utilisateur, i.date_dl, i.dimension, etc...)

    mon soucis c'est que je veux afficher sur une page les utilisateurs, mais aléatoirement, en indiquant à côté du nom une image leur appartenant.
    sachant que si "u.choix_image" est null j'affiche la derniere image téléchargée
    et si elle est pas null s'affiche la création choisit ( u.choix_image == i.id )

    hélas je voix pas trop comment m'y prendre pour faire ca en une requete :/ je vois comment la faire en deux :
    je choisit aléatoirement pas sql les utilisateurs. et lors de l'affichage selon la valeur de u.choix_image je fais une seconde requête pour avoir les informations de l'image

    si quelqu'un pouvait me mettre sur la voie ca m'aidera beaucoup ^^

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Si tu assez connais SQL Server, je te suggère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TOP(1)
    [...]
    FROM ...
    INNER JOIN ...
    ORDER BY NEWID()
    Sinon, je te suggère d'apprendre et ensuite de me relire :p

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    merci de la réponse
    je tourne sur mysql donc ca pourra pas marché néanmoins c'est pas la ou est mon problème
    c'est les info de l'image ou ca coince :p

    pour simplifier ce que j'ai fait déjà (j'ai pas mal de jointure externe pour récupérer l'ensemble des info de l'utilisateur) je suis sur du php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $row = mysql_fetch_array( mysql_query( 'SELECT u.ID, u.nom, u.choix_image, u.adresse FROM db_user AS u ORDER BY RAND() LIMIT 1' ) );
     
    if ( IS_NULL( $row['u.choix_image'] ) )
       {
       $row2 = mysql_fetch_array( mysql_query( 'SELECT i.id, i.id_utilisateur, i.date_dl, i.dimension FROM db_image WHERE i.id_utilisateur == '.$row['id'] ORDER i.date_dl DESC LIMIT 1 ));
       $row['choix_image'] = $row2['id'];
       }
    else
       {
       $row2 = mysql_fetch_array( mysql_query( 'SELECT i.id, i.id_utilisateur, i.date_dl, i.dimension FROM db_image WHERE i.id = '.$row['choix_image']));
       }
    et apres je prend les info de $row2 pour les remettre dans $row

    donc c'est une facon tres dégualasse de programmer mais j'en vois pas d'autre :/
    (j'ai pensé aux conditionnel sur les commandes SQL mais soit j'ai mal compris soit il manque une info )

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    euh...en php ???

    Sur le forum .Net ?

    N'y aurait-il pas une erreur d'aiguillage ?

    Pour ton probleme, tu peux utiliser des jointures (left ou right join), pour faire ta requete d'un coup

    (et evite de ramener plus de champ que tu n'en utilise )

    Pour plus d'infos sur les jointures :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Je pense qu'en MySql tu peux utiliser des subquery comme des tables sources de données

    SELECT ...
    FROM (
    SELECT ...
    FROM ...
    ORDER BY RAND()
    LIMIT 1
    ) AS T
    ...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    @ philippe Vialate
    j'utilise pas mal de jointures vu que les informations sur les utilisateurs et les images sont dans plusieurs tableaux différents (image, type image, catégorie + langue etc ...)
    je demandais a tout hasard si il y avait moyen de moins solliciter mon serveur, vu qu'il y a 3 requêtes par utilisateur, mon code fonctionne très bien.

    @ sergejack
    merki de la piste je pense que je vais partir la dessus, au moins j'aurai au maximum deux requêtes voir une seule (pour une distribution uniforme je tournerai sur 1.5 requêtes par utilisateur )

    @ all
    j'avais regardé du côté des CASE et SWITCH mais leur utilisation sont très limité et insuffisant avec ce que je veu faire

    edit:
    bon j'ai fait la modif ca fonctionne sans soucis je tourne à 1.5 requête par utilisateur mais bon c'est toujours pas une seule et unique requête ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [requete] requete imbriquée
    Par karamazov994 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 17h54
  2. Requete imbriquée, oui mais...
    Par zax-tfh dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/03/2005, 01h48
  3. Equivalent d'une requete imbriquée ??
    Par webtheque dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/08/2004, 10h07
  4. Requetes imbriquées et jointures
    Par Emile Le Tueur* dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/03/2004, 23h12
  5. Requete imbriquée sur Firebird ou Interbase
    Par Thib dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 09h00

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