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 :

Full Text sensible à la casse :( [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Par défaut Full Text sensible à la casse :(
    Bonsoir tout le monde,

    Dans le manuel de MySql il est écrit noir sur blanc que la recherche FULLTEXT n'est pas sensible à la casse. Pourtant, mes tests me montrent l'inverse. Ma base est en UTF8-bin et mon système est un dérivé UNIX (Mac OS Leopard), ça peut venir de là ?

    Au cas où ce soit utile, voici la façon dont je fais ma recherche, c'est un peu compliqué mais c'est parce que je dois générer ma requête à partir d'un formulaire dont on ne remplit pas forcément tous les champs. Bref, y'a de la concaténation à tout va...

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    function DisplayNews() {
    	if (!empty($_POST['news_search'])) {
    		$news = '
    			<ul>
    		';
    		if (!empty($_POST['day'])) {
    			$day = "jour = " . $_POST['day'] . "";
    			if (!empty($_POST['month']) OR !empty($_POST['year']) OR !empty($_POST['keywords'])) {
    				$day.= ' AND ';
    			}
    		}
    		if (!empty($_POST['month'])) {
    			$month = "mois = " . $_POST['month'] . "";
    			if (!empty($_POST['year']) OR !empty($_POST['keywords'])) {
    				$month.= ' AND ';
    			}
    		}
    		if (!empty($_POST['year'])) {
    			$year = "annee = " . $_POST['year'] . "";
    			if (!empty($_POST['keywords'])) {
    				$year.= ' AND ';
    			}
    		}
    		if (!empty($_POST['keywords'])) {
    			$keywords = "MATCH (titre,contenu) AGAINST ('" . $_POST['keywords'] . "')";
    		}
    		$__news = mysql_query("SELECT * FROM news WHERE $day$month$year$keywords") or die (mysql_error());
    		while ($_news = mysql_fetch_array($__news)) {
    			$news.= '
    				<li>' . $_news['contenu'] . '</li>
    			';
    		}
    		$news.= '
    			</ul>
    		';
    		echo $news;
    	}
    }
    ?>
    Merci d'avance pour votre passage sur ce post

    P.S. J'ai bien sûr créé un index sur les colonnes idoines et j'ai réussi à avoir des requêtes qui marchent si je respecte les majuscules.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Plutot que de commencer par le code, execute plutot ta requete finale avec phpmyadmin avec ou sans majuscule.
    Si a ce moment la, tu as des resultats differents, donne nous la requete et un dump de ta table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM news WHERE MATCH (titre,contenu) AGAINST ('Robin')
    -> Fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM news WHERE MATCH (titre,contenu) AGAINST ('robin')
    -> Pas de résultat

    Et voici le dump (j'ai rempli avec un peu n'importe quoi...)
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    -- phpMyAdmin SQL Dump
    -- version 2.11.9.2
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Lun 09 Mars 2009 à 22:24
    -- Version du serveur: 5.0.67
    -- Version de PHP: 5.2.6
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
     
    --
    -- Base de données: `alternanse`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `news`
    --
     
    CREATE TABLE IF NOT EXISTS `news` (
      `id` int(11) NOT NULL auto_increment,
      `jour` int(2) NOT NULL,
      `mois` int(2) NOT NULL,
      `annee` int(4) NOT NULL,
      `titre` varchar(255) collate utf8_bin NOT NULL,
      `contenu` text collate utf8_bin NOT NULL,
      PRIMARY KEY  (`id`),
      FULLTEXT KEY `titre` (`titre`,`contenu`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=8 ;
     
    --
    -- Contenu de la table `news`
    --
     
    INSERT INTO `news` (`id`, `jour`, `mois`, `annee`, `titre`, `contenu`) VALUES
    (5, 2, 1, 2000, 'Hind', 0x48696e64204d61686d6f756469),
    (4, 1, 1, 2000, 'Robin', 0x526f62696e204d61796f6c),
    (6, 2, 1, 2000, 'Les gens', 0x736f6e742073796d706173),
    (7, 3, 2, 2001, 'Test', 0x746573746920746573746f);

  4. #4
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Bonsoir ! Bon ok je vais contourner le probleme mais pour ca je sais pas trop quoi proposer d'autre:

    http://fr2.php.net/manual/fr/function.ucfirst.php

    A savoir mettre le premier caractère de ta variable en majuscule avant la requete

    bon je sais pas propre du tout puisque tu aura surement des mot sans majuscules... A voir donc =)

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Par défaut
    Héhé j'y ai pensé, tester les deux à chaque fois, voire même le mot tout en majuscules mais bon... Je préfère garder ça en dernier recours !

  6. #6
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    J'imagine ! Je viens de lire deux trois choses sur le fulltext ta méthode semble la bonne pourtant, c'est bien un match avec un against... donc niveau syntaxe rien à dire, il reste donc un problème au niveau base de donnée? Au niveau mySQL c'est bon ... donc peut être au niveau construction de la table? ^^

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Fiou j'ai cherché ...
    La réponse est dans la doc en anglais :

    By default, the search is performed in case-insensitive fashion. However, you can perform a case-sensitive full-text search by using a binary collation for the indexed columns. For example, a column that uses the latin1 character set of can be assigned a collation of latin1_bin to make it case sensitive for full-text searches.
    Pour les non-anglophone : par defaut la recherche n'est pas sensible a la casse sauf pour les collations binaires.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Surligner texte rechercher : sensible à la casse
    Par benjea06 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/04/2014, 11h58
  2. [MySQL] Finesse avec full text sur l'orthographe, comment être moins sensible
    Par yule dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/11/2010, 16h35
  3. probleme avec une requete full text
    Par maxxou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2005, 17h20
  4. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  5. Recherche FULL Text existe que dans MySql ?
    Par seb.49 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 01/06/2004, 22h30

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