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 :

Avoir les 50 premiers résultat par rapport à une recherche [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 39
    Points
    39
    Par défaut Avoir les 50 premiers résultat par rapport à une recherche
    Bonjour,

    Pour info j'utilise mysql 5 et php 5

    J'ai un petit problème avec les limit y'a un truc que je ne comprends pas.

    voici ma requête sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $select = "SELECT * from produits, pays, types WHERE produits.checked = '".$_SESSION['type']."' and produits.vente = '".$_SESSION['num']."' and pays.code_p = produits.pays and types.code_t = produits.type ORDER BY produits.".$mode." ASC LIMIT ".($critere-1).",50";
    Bon alors $mode et $critere proviennent du formulaire qui me permet d'effectuer ma recherche $mode est en faite la sélection d'un champ de la table produits, en l'occurrence (saisie ou lot) et $critere est un nombre X pour la recherche.

    bon y'a deux cas le premier :

    Avec lot ça marche, pourquoi? Parceque si je fais une recherche par exemple sur le lot 1 je vais bien avoir les 50 premiers lot car la limite sera alors 0,50.

    deuxième cas :

    Avec saisie ça marche pas , car si je recherche la saisie 117 je vais tombé sur la saisie 233 pourquoi? parceque la saisie 233 correspond au lot 117 et que la limite est donc 116,50.

    Donc comment est il possible d'afficher les 50 premiers résultat quelque soit le champ de la table qu'ont interroge, est t'il possible de faire des limites autre que sur les id d'une table ? Tel est le dilemme.

    Bon j'ai également essayé de mettre juste LIMIT 50 bien sur mais ça marche pas car dans ce cas là je peux pas rechercher au delà des 50 premiers produits : exemple : je rechercher le lot 51 ça me retournera le lot 1.

    Bon si jamais c'est pas possible, vous pouvez peut être m'aider à optimisé ma table et ou ma requête pour évité d'exploser les temps d'attente pour info la table aura plus de 10000 entrées sur un serveur local car cette requête marche parfaitement sans les limites.

    Merci

    Antoine

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Donc comment est il possible d'afficher les 50 premiers résultat quelque soit le champ de la table qu'ont interroge
    Concernant "limit", ton point de départ doit être inférieur à ton point d'arrivée. C'est donc normal que 116,50 ne fonctionne pas. Ensuite, "limit" s'applique aux enregistrements de la table et non aux champs. Pour afficher les 50 premiers résultat, il suffit de spécifier ton intervalle : LIMIT 0,50

    Après $critere doit forcement comme je l'ai dit, etre inférieur à ton extrémité. L'astuce dans ton formulaire est au préalable par exemple de calculer le nombre total d'enregistrement de ta table (qui te permettra de déterminer l'extrimité). Et ensuite permettre à $critere de rester dans cet intervalle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM ta_table
    Si ça peut déjà t'aiguiller...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 55
    Points
    55
    Par défaut
    J'ai pas très bien compris ce que tu veux faire,

    mais si à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $select = "SELECT * from produits, pays, types WHERE produits.checked = '".$_SESSION['type']."' and produits.vente = '".$_SESSION['num']."' and pays.code_p = produits.pays and types.code_t = produits.type ORDER BY produits.".$mode." ASC LIMIT ".($critere-1).",50";
    Tu faisais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $select = "SELECT * from produits, pays, types WHERE produits.checked = '".$_SESSION['type']."' and produits.vente = '".$_SESSION['num']."' and pays.code_p = produits.pays and types.code_t = produits.type ORDER BY produits.".$mode." ASC LIMIT ".($critere-1).",".($critere+49);
    ça ne le ferait pas ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    En réponse à error404 : je pense que tu te trompe dans ta première explication car le premier chiffre est le point de départ et le second est combien ont en affiche non ?

    donc 116,50 vas afficher 116 jusqu'a 166 a moins que je me goure vraiment dans les limites.

    Bon ensuite gandalf76fr c'est vrai que ton idée n'est pas mauvaise par contre je pense que je vais abandonnée cette idée de limit, car, je me suis rendu compte que ça affiche en gros les 50 premiers résultat par rapport au "where" et aux "and" bon en fonction du champ de la table sur lequel ont fait la recherche j'ai l'impression que c'est pas possible de faire comme ça.

    Bon si je fais une recherche avec saisie ou lot dans les deux cas admettons que je recherche la saisie 129 et le lot 129 et bien dans les deux cas j'aurai le même résultats car j'aurai le 129ème résultat + 50.

    Donc je vais tester autre chose je vais faire une première requête qui récupère l'id du produit précisément et ensuite je ferrai une seconde requête qui par de l'id et affiche les + 50, je pense que ça serra mieux non ?

    Sinon si vous avez des idées pour optimiser la première requête je suis toujours preneur

    Merci

  5. #5
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    Comprend vraiment pas...

    Avec saisie ça marche pas , car si je recherche la saisie 117 je vais tombé sur la saisie 233 pourquoi?
    ? ?


    est t'il possible de faire des limites autre que sur les id d'une table ?
    oui ... les limites sont pour "limiter" les lignes si tu fais un order by XXX, le limit va etre sur ce XXX..

    et pour les limites... limit X,Y
    X - depart
    Y - nombre de lignes a afficher..

    et puis pour les jointures... la norme sql2, dis de les faires avec les "join" et non sur les where...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    Bon alors pourquoi avec ma requête ça marche pas je deviens fous là !.

    Normalement si je fais ma recherche sur la saisie 120 ça fera ....... order by produits.saisie LIMIT (120-1), 50

    et donc je devrais voir les produits de la saisie 120 à 170 c'est bien ce que je m'étais dis au début, seulement ça marche pas.

    Si vous pouviez ré-écrire ma requête au lieu de m'aiguiller ça serrai super sympa car là je pète un câble promis!



    Merci

  7. #7
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    et donc je devrais voir les produits de la saisie 120 à 170 c'est bien ce que je m'étais dis au début, seulement ça marche pas.
    Normalment, ma reponse a ce genre d´afirmation, fait alusion a une boule de cristal...

    tu peus passer ta requete complete?
    Ca marche pas... t´as quoi comme resultats, et tu attendais quoi?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    Si tu veux tester ma requête vas à cette adresse : progiciel

    puis tu fais rechercher > produit

    ensuite je met le fichier php complet en pièce jointe et ça ce passe à partir de la ligne 122
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['submit']))
    Merci
    Fichiers attachés Fichiers attachés

  9. #9
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    Pas facile a comprendre ce que tu voulais...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $select = "SELECT * from produits, pays, types WHERE produits.checked = '".$_SESSION['type']."' 
    and produits.vente = '".$_SESSION['num']."' and pays.code_p = produits.pays 
    and types.code_t = produits.type and produits.".$mode."> '".$_SESSION['num']."'-1
    ORDER BY produits.".$mode." ASC LIMIT 0,50";

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 39
    Points
    39
    Par défaut
    Salut, il y avais juste une petite erreur dans ce que tu m'as fais et j'ai remplacé par >= pour éviter de mettre le -1 qui pose problème quand ont fait pas une recherche sur un nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select = "SELECT * from produits, pays, types WHERE produits.checked = '".$_SESSION['type']."' and produits.vente = '".$_SESSION['num']."' and pays.code_p = produits.pays and types.code_t = produits.type and produits.".$mode.">= '".$critere."' ORDER BY produits.".$mode." ASC LIMIT 0,50";
    $mode >= $critere et pas $_SESSION['num'];

    $_SESSION['num'] étant le numéro de la vente en cours pas la recherche

    En tout cas je te remercie du fond du coeur c'est parfait

    Merci A+

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

Discussions similaires

  1. Obtenir les 5 premiers résultats par catégorie
    Par FabFab9 dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/01/2015, 14h58
  2. Réponses: 4
    Dernier message: 20/10/2010, 12h27
  3. Ordonner les éléments par rapport à une sélection ?
    Par brunoperel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/03/2007, 12h13
  4. Réponses: 7
    Dernier message: 31/07/2006, 13h50
  5. Réponses: 2
    Dernier message: 05/06/2006, 17h51

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