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 :

Sélection sql avec exclusion


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2023
    Messages : 8
    Par défaut Sélection sql avec exclusion
    Je tiens un site de lecture sur lequel les utilisateur peuvent recevoir des recommandation. Pour cela ,j'ai besoin de sélectionner les livre d'autre utilisateur ayant une note de 4 et plus et dont le ne titre ressemble pas a un des titre des livre appartenant a l'utilisateur actuel.J'aimerais une selection sql les selectionnant automatiquement ,un peu comme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SELECT * FROM livres
                      WHERE utilisateur_id != $utilisateurActuel
                      AND note >= 4
                      AND titre NOT IN (
                          SELECT %titre% FROM livres WHERE utilisateur_id = $utilisateurActuel (depuis php donc utilisation de variable interne au code)
                      ) ORDER BY note DESC
    (incorect bien sur,juste pour exprimer mon idée...)
    Comment pourais je le faire?
    Merci d'avance

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Qu'est-ce que tu entends précisément par "titre ne ressemblant pas à un autre titre" ? Essaie de le reformuler et donne des exemples concrets de titres qui "se ressemblent" et de titres qui ne se ressemblent pas, pour bien montrer quelle est la limite entre les deux.

    Montre aussi la structure de ta base de données.

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    A tout hasard, essaie ce genre de chose

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM livres
    WHERE utilisateur_id != 2250
    AND note >= 4
    AND concat("%",titre,"%") NOT IN (
      SELECT concat("%",titre,"%")
      FROM livres 
      WHERE utilisateur_id = 2250
    ) ORDER BY note DESC
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Attention : les titres ne sont pas uniques, il existe de nombreux cas de titres homonymes d'auteurs et de contenus très différents. C'est également vrai pour les films et pour les œuvres musicales.
    Il faudrait donc vérifier que le titre et l'auteur sont différents

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Bonjour,
    La demande initiale concerne les livres dont le titre ne ressemble pas à un des livres de l'utilisateur.
    Donc une comparaison "directe", comme un NOT IN par exemple, ne fonctionne pas, puisqu'il s'agit d'une recherche à l'identique.

    Il faudrait utiliser des fonctions de recherche "approchante", quelques piste de SqlPro ici.

    Tu peux aussi avoir une table de mots avec le Soundex, nue autre table qui "fait le lien" entre un mot et un titre, et calculer une sorte de score de correspondance entre 2 titres, en fonctiondes mots qui sont communs entre les deux. Et avec les Soundex tu peux chercher des mots approchants, pour gérer les pluriels par exemple.
    Ainsi 2 livres dont les titres respectifs sont "Le crime" et "Les Crimes" peuvent avoir un score de correspondance élevé, et mener à une exclusion.

    C'est "un peu" lourd à mettre en place, mais bien paramétré ça peut être assez efficace.

    Tatayo.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2023
    Messages : 8
    Par défaut essai code
    Citation Envoyé par Dendrite Voir le message
    A tout hasard, essaie ce genre de chose

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM livres
    WHERE utilisateur_id != 2250
    AND note >= 4
    AND concat("%",titre,"%") NOT IN (
      SELECT concat("%",titre,"%")
      FROM livres 
      WHERE utilisateur_id = 2250
    ) ORDER BY note DESC
    le code mis sur la page :
    Nom : Capture d'écran 2023-11-07 112357.png
Affichages : 94
Taille : 30,0 Ko
    le resultat :
    Nom : Capture d'écran 2023-11-07 112510.png
Affichages : 93
Taille : 32,6 Ko

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2023
    Messages : 8
    Par défaut
    avec le code
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM livres
    WHERE utilisateur_id != $utilisateurActuel
     AND note >= 4
     AND titre NOT IN (
    SELECT titre FROM livres WHERE utilisateur_id = $utilisateurActuel
    ) GROUP BY titre ORDER BY note DESC
    je supprime deja les livre en double mais cela n'epeche pas les livres semblables...

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Le délimiteur de chaîne en SQL est la ', et non ".
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT * FROM livres
    WHERE utilisateur_id != 2250
    AND note >= 4
    AND concat('%',titre,'%') NOT IN (
      SELECT concat('%',titre,'%')
      FROM livres 
      WHERE utilisateur_id = 2250
    ) ORDER BY note DESC

    Mais comme je le disais, NOT IN ne va pas "parser" le %, il ne se comporte pas comme un LIKE.
    Bref l'ajout de '%' en début et fin de chaîne ne change rien ici.

    Tu as une implémentation pour MySql d'une comparaison de chaîne , si ça peut t'aider.

    Tatayo.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par tatayo Voir le message

    Tu as une implémentation pour MySql d'une comparaison de chaîne , si ça peut t'aider.

    Tatayo.
    Bonne idée !

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2023
    Messages : 8
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Qu'est-ce que tu entends précisément par "titre ne ressemblant pas à un autre titre" ? Essaie de le reformuler et donne des exemples concrets de titres qui "se ressemblent" et de titres qui ne se ressemblent pas, pour bien montrer quelle est la limite entre les deux.

    Montre aussi la structure de ta base de données.
    Des livre qui se ressemblent :
    • gardien des cité perdues 1 - 9 (10 bientôt j'espère) et gardien des cité perdues 1
    • Harry potter et Harry Potter et la Chambre des secrets


    qui ne se resseblent pas :
    • Mathématiques Barbazo et Physique Chimie 2de
    • Artemis Fowl et Pourquoi la tartine tombe toujours du côté du beurre

    La base de donné :
    Nom : Capture d'écran 2023-11-07 112105.png
Affichages : 94
Taille : 167,6 Ko

Discussions similaires

  1. Probleme de connexion JDBC avec une base de donne mysql
    Par sultan_kafila dans le forum JDBC
    Réponses: 19
    Dernier message: 12/04/2006, 08h25
  2. Probleme de requete SQL avec la valeur NULL
    Par samyghan dans le forum Installation
    Réponses: 8
    Dernier message: 12/03/2006, 17h24
  3. Réponses: 7
    Dernier message: 05/10/2005, 18h06
  4. Requête SQL avec une réponse unique
    Par Glutinus dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 16h35
  5. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18

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