2013-01-09 11 views
10

powiedzmy mamy 4 pozycji w tabeli:Jak sortować wyniki w MySQL alfabetycznie, ale z wyszukiwanym terminem pasującym do pierwszego przy użyciu CodeIgniter ActiveRecord?

  1. Michela Jordana
  2. Tom Mark Jordan
  3. Jordan John
  4. Adam Jordan Robert

Termin wyszukiwania jest "Jordan ", jak mogę uzyskać wyniki posortowane alfabetycznie, ale z wyszukiwanym terminem pasującym do pierwszego tak:

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

Im przy użyciu tego kodu, ale nie dostajesz to, czego chcę:

$this->db->select('id, name'); 
$this->db->from('users'); 
$this->db->like('name', $search_term); 
$this->db->order_by('name', 'asc'); 
$query = $this->db->get(); 
+0

Myślę, że musiałbyś ponownie sortować w PHP po otrzymaniu wyników. Gdybyś miał nazwę podzieloną na różne pola, mógłbyś ją uruchomić. – swatkins

+0

Mam pełne imię i nazwisko w jednej kolumnie. –

+0

Dobrze, rozumiem to. Dlatego musisz uzyskać wyniki, a następnie ponownie posortować wyniki. – swatkins

Odpowiedz

8

Spróbuj tego:

SELECT id, fullName 
FROM test 
ORDER BY FIND_IN_SET('Jordan', REPLACE(fullName, ' ', ',')), fullName; 

Sprawdź ten link SQL FIDDLE DEMO

WYJŚCIE

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

Wygląda świetnie, ale jak mogę użyć go jako kwerendy CodeIgniter? I za pomocą zmiennej $ search_term zamiast słowa "Jordan" ?? –

+0

@WaleedAsender Nie pracowałem nad CodeIgniter tak przepraszam za to, więc masz zrobić to przez własne. –

+0

Niestety z jakiegoś powodu nie działa dla mnie! '$ query = $ this-> db-> query (" WYBIERZ nazwę od członków ORDER BY FIND_IN_SET ("$ keyword", REPLACE (name, '', ','))), name ") -> result(); ' –

5

Można spróbować:

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

Utrzymuje ten błąd: Wystąpił błąd bazy danych Numer błędu: 1064 Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu '', '' ',' ')) ','' fullName'' w linii 3 –

+0

Upewnij się, że nie użyłeś podwójnie cytaty między klauzulami orderby. Również pełna nazwa jest używana bez cudzysłowów –

0

moja próba dla ciebie:

$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(); 

Wiem, że to wygląda trochę dziwnie, ale uwierzcie mi, chcesz używać REGEXP. : D

Powiązane problemy