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

 MySQL Discussion :

Requête SQL pour un moteur de recherche


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Requête SQL pour un moteur de recherche
    Bonjour à tous,

    Dans le cadre du développement d'un moteur de recherche pour un site de vidéos, j'ai besoin d'écrire une requête SQL qui me retourne les vidéos correspondantes à un/des mots clés triés par leur moyenne de votes.

    Vous allez me dire d'utiliser une requête MATCH/AGAINST mais c'est ce que je fais déjà. Le seul soucis avec cette requête c'est qu'il exclut les mots-clés retournant plus de la moitié des vidéos. Dans le cas où cette 1ère requête ne retourne aucun résultat, j'aimerais donc pouvoir afficher tout de même les vidéos correspondantes.

    Voilà où j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT vid_id
    FROM video AS v
    LEFT JOIN ratings AS r ON v.vid_id=r.id
    WHERE (vid_title LIKE "%toto%"
    OR  vid_tags LIKE "%toto%")
    AND r.id IS NULL
    ORDER BY r.total_value/r.total_votes DESC, v.vid_date DESC
    Cependant mes vidéos ne sont pas classées correctement. A mon avis je n'utilise pas correctement LEFT JOIN...


    Informations :
    - Pas toutes les vidéos ne possèdent un enregistrement correspondant dans la table "ratings" (vidéos n'ayant pas encore reçues de votes).
    - Le but est d'afficher en priorité les vidéos notées (par ordre décroissant), puis par date d'ajout (des plus récentes aux plus anciennes).


    J'espère que ce n'est pas trop confus.

    Merci par avance pour votre aide !

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Quel est le type de l'association entre les tables `video ` et `ratings`?
    Est-ce une relation 0,1 >>> 1,1 ou 0,n >>> 1,1
    J'avoue ne pas bien comprendre.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    video 1,1 ------ 0,1 ratings
    Pour toute vidéo il peut y avoir un enregistrement au maximum correspondant dans ratings.

    video
    - vid_id
    - vid_title
    - vid_tags
    - ...

    ratings
    - id (lié à vid_id)
    - total_votes
    - total_value
    - used_ips

    Je sais qu'en sois je pourrais ajouter les champs de ratings dans video, mais pour des raisons de contrainte de temps je ne préfèrerai ne pas redévelopper mon système de notation.

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Le problème avec LEFT JOIN c'est que tu ramènes des vidéos sans rating. Et dans ce cas, r.total_value/r.total_votes équivaut à NULL /NULL et je ne sais pas comment ORDER BY peut se dépatouiller avec ça.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. requête sql pour recherche par mois
    Par mahboubi dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/01/2009, 09h05
  2. Réponses: 6
    Dernier message: 14/10/2008, 23h05
  3. [MySQL] Requête pour un moteur de recherche
    Par gueud dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/03/2008, 14h19
  4. [SQL] Aide pour un moteur de recherche
    Par Death83 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 26/10/2005, 14h12
  5. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55

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