10
votes

Comment trier les résultats MySQL par ordre alphabétique, mais avec la perquisition de la correspondance d'abord à l'aide de CodeDigniter Activerecord?

Disons que nous avons 4 articles dans une table:

  1. Michel Jordan
  2. Tom Mark Jordan
  3. Jordan John
  4. Adam Jordan Robert

    Le terme de recherche est " Jordan ", comment puis-je obtenir les résultats triés par ordre alphabétique mais avec la correspondance de recherche d'abord comme ceci:

    1. Jordan John
    2. Michel Jordan
    3. Tom Jordan Robert
    4. Adam Mark Jordan

      im en utilisant ce code, mais ne pas obtenir ce que je veux: xxx


3 commentaires

Je pense que vous devriez avoir à ré-trier dans PHP après avoir reçu les résultats. Si vous aviez le nom cassé dans différents domaines, vous pouvez le faire fonctionner.


J'ai le nom complet dans une colonne.


Juste, je comprends ça. Par conséquent, vous devez obtenir les résultats, puis re-trier ces résultats.


3 Réponses :


10
votes

Essayez ceci:

| ID |          FULLNAME |
|----|-------------------|
|  1 |       Jordan John |
|  2 |     Michel Jordan |
|  4 | Tom Jordan Robert |
|  3 |  Adam Mark Jordan |


4 commentaires

A l'air super, mais comment pourrais-je l'utiliser comme requête de CodeDigniter? Et en utilisant une variable $ Search_term au lieu du mot 'Jordan' ??


@Waleedasender Je n'ai pas travaillé sur Codedigniter, désolé pour cela, vous l'avez donc fait par votre propre.


Malheureusement pour une raison quelconque, il ne fonctionne pas pour moi !! $ Query = Ceci-> DB-> Query ("Sélectionnez le nom de Membres commandez par Find_in_set ('$ mot-clé', remplacez (nom, '', ',') -> résultat () ;


Vous recherchez '$ keyword' Vous devez vous assurer que la vérification est insérée dans la requête via ceci: recherche_in_set ('". $" ... Cela devrait fonctionner (vrai avec PHP, je ne suis pas sûr d'autres langues)



6
votes

Vous pouvez essayer ceci:

$this->db
     ->select('id, fullName')
     ->from('test')
     ->order_by("FIND_IN_SET('Jordan', REPLACE(fullName, ' ', ',')) , fullName");
$query = $this->db->get();


2 commentaires

Il convient à cette erreur: une erreur de base de données est survenue Numéro d'erreur: 1064 Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de Server MySQL pour la syntaxe de droite à utiliser à proximité '', ', ')) ') 'à la ligne 3


Assurez-vous que vous n'avez pas utilisé de guillemets de doubles citations entre l'ordre par clause. Aussi le nom de fichier est utilisé sans citations



0
votes

Ma tentative pour vous:

$this->db->select('id, name, (SELECT name FROM users WHERE name REGEXP "^'.$search_term.'") as "regexp_match"');
$this->db->from('users');
$this->db->like('name', $search_term);
$this->db->order_by('name', 'asc');
$this->db->order_by("regexp_match", "asc");
$query = $this->db->get();


0 commentaires