2013-01-09 12 views
10

Hãy nói rằng chúng ta có 4 mặt hàng trong một bảng:Cách sắp xếp kết quả MySQL theo thứ tự bảng chữ cái nhưng với cụm từ tìm kiếm khớp đầu tiên bằng CodeIgniter ActiveRecord?

  1. Michel Jordan
  2. Tom Đánh dấu Jordan
  3. Jordan John
  4. Adam Jordan Robert

Cụm từ tìm kiếm "Jordan ", làm cách nào tôi có thể nhận được kết quả được sắp xếp theo thứ tự bảng chữ cái nhưng với cụm từ tìm kiếm phù hợp đầu tiên như sau:

  1. Jordan John
  2. Michel Jordan
  3. Tom Jordan Robert
  4. Adam Đánh dấu Jordan

Im sử dụng mã này, nhưng không nhận được những gì tôi muốn:

$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

Tôi nghĩ bạn sẽ phải sắp xếp lại trong PHP sau khi nhận được kết quả. Nếu bạn đã có tên chia thành các lĩnh vực khác nhau, bạn có thể làm cho nó hoạt động. – swatkins

+0

Tôi có tên đầy đủ trong một cột. –

+0

Phải, tôi hiểu điều đó. Vì vậy, bạn phải nhận được kết quả, sau đó sắp xếp lại các kết quả đó. – swatkins

Trả lời

8

Hãy thử điều này:

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

Kiểm tra liên kết này SQL FIDDLE DEMO

OUTPUT

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

Có vẻ tuyệt vời, nhưng làm cách nào tôi có thể sử dụng nó làm truy vấn CodeIgniter? Và sử dụng biến $ search_term thay vì từ 'Jordan' ?? –

+0

@WaleedAsender Tôi đã không làm việc trên CodeIgniter vì vậy xin lỗi vì điều đó vì vậy bạn đã làm điều đó bằng cách của riêng bạn. –

+0

Thật không may vì một số lý do nó không làm việc cho tôi !! '$ truy vấn = $ this-> db-> truy vấn (" SELECT tên FROM thành viên ORDER BY FIND_IN_SET ('$ keyword', REPLACE (tên, '', ',')), tên ") -> result(); ' –

5

Bạn có thể thử này:

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

Nó giữ nguyên lỗi này: Lỗi cơ sở dữ liệu xảy ra Số lỗi: 1064 Bạn có lỗi trong cú pháp SQL; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp đúng để sử dụng gần '', ''', ''))', ''fullName''' tại dòng 3 –

+0

Hãy chắc chắn rằng bạn đã không sử dụng gấp đôi trích dẫn giữa mệnh đề orderby. Cũng tên đầy đủ được sử dụng mà không có dấu ngoặc kép –

0

Nỗ lực của tôi dành cho bạn:

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

Tôi biết có vẻ lạ, nhưng hãy tin tôi, bạn muốn sử dụng REGEXP. : D

Các vấn đề liên quan