2009-10-19 37 views
34

Tôi có khoảng 20.000 hàng trong bảng INNODB được gọi là 'thẻ', vì vậy FULLTEXT không phải là một tùy chọn.MySQL - Cách đặt hàng bằng cách liên hệ? INNODB Bảng

Vui lòng xem xét bảng này:

id  |  name  |  description 
---------------------------------------------------------- 
1  John Smith  Just some dude 
2  Ted Johnson  Another dude 
3  Johnathan Todd This guy too 
4  Susan Smith  Her too 
5  Sam John Bond And him 
6  John Smith  Same guy as num 1, another record 
7  John Adams  Last guy, promise 

Vì vậy, nói rằng người dùng tìm kiếm 'John', tôi muốn tập hợp kết quả là theo thứ tự:

7  John Adams 
6  John Smith 
3  Johnathan Todd 
5  Sam John Bond 
2  Ted Johnson 

Xin lưu ý rằng chúng tôi 'đã chỉ kéo' John Smith 'một lần, chúng tôi đã tham gia gần đây nhất của ông. Do dữ liệu của tôi, tất cả các tên đều dành cho cùng một người chính xác, không cần phải lo lắng về 2 tên khác nhau có tên là John Smith. Ý tưởng? Hãy cho tôi biết nếu tôi có thể làm rõ bất cứ điều gì.

+1

Bạn dường như muốn đặt hàng bằng cách "LastName, FirstName", không phải bởi sự liên quan (tuy nhiên bạn xác định đó). Điều này có đúng không? – Tomalak

Trả lời

110

phiên bản 1:

SELECT max(id) id, name 
    FROM cards 
WHERE name like '%John%' 
GROUP BY name 
ORDER BY CASE WHEN name like 'John %' THEN 0 
       WHEN name like 'John%' THEN 1 
       WHEN name like '% John%' THEN 2 
       ELSE 3 
      END, name 

phiên bản 2:

SELECT max(id) id, name 
    FROM cards 
WHERE name like '%John%' 
GROUP BY name 
ORDER BY CASE WHEN name like 'John%' THEN 0 
       WHEN name like '% %John% %' THEN 1 
       WHEN name like '%John' THEN 2 
       ELSE 3 
      END, name 
+0

Tuyệt vời! Điều đó hoạt động chính xác như tôi muốn. Cảm ơn najmeddine! – k00k

+1

vui lòng trợ giúp. Tôi sửa đổi nó một chút để xử lý nhiều trường hợp hơn. – manji

+0

Tôi nghĩ cách khác hoạt động tốt hơn trong trường hợp cụ thể của tôi, nhưng cả hai đều có thể hữu ích cho người khác, bạn có thể đặt cả hai lên đó vì mục đích của hậu thế không? – k00k

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