Theo như tôi biết nhóm mysql THEO nhóm đến hồ sơ cuối cùng được tìm thấy.GROUP BY trả lại hồ sơ đầu tiên
Có giải pháp nào cho GROUP THEO bản ghi đầu tiên không?
Tôi đã thiết lập lệnh ORDER trong SQL và tôi cần GROUP BY trả về bản ghi đầu tiên và không phải là bản ghi cuối cùng.
EDIT
Đây là Query
SELECT
DISTINCT(master.masterID),
langData.*,
master.*
FROM master_table as master
INNER JOIN lang_table as langData ON
langData.masterID=master.masterID
GROUP BY master.masterID
ORDER BY
CASE
WHEN langData.lang='currentLang' THEN 1 ELSE 999 END ,
master.name desc LIMIT 0,10
Các truy vấn trên chọn masterID
cho bảng đa ngôn ngữ và giả sử để trở FIRST các bản ghi trong currentLang
và sắp xếp chúng theo tên VÀ THEN bài khác ngôn ngữ.
Đừng hỏi tôi tại sao tôi không đặt ngôn ngữ thành JOIN. Đây là cách để làm.
Vì vậy, mọi thứ hoạt động tốt cho đến nay mong đợi trường hợp tôi có bản ghi với các ngôn ngữ en
và fr
. Nếu currentLang
là en
sau đó dựa trên
langData.lang='currentLang' THEN 1 ELSE 999 END
thứ tự en
là 1 và fr
trật tự là 999 và thay vì nhận được giá trị của en
tôi nhận được giá trị của fr
.
Đó là lý do tôi muốn nhóm thành hàng đầu tiên.
Tôi sẽ không hỏi bạn tại sao bạn không cài đặt ngôn ngữ trong 'JOIN' thay vào đó, tôi sẽ nói với bạn rằng cách này nó sẽ không hoạt động. Một biểu thức tách rời trong 'GROUP BY' trả về một bản ghi tùy ý từ mỗi nhóm và không được sử dụng nếu các giá trị khác nhau. Bạn có thể trả về bất kỳ bản ghi nào từ 'master_table' (tất cả chúng sẽ giống nhau trong mỗi nhóm) nhưng không phải là từ' lang_table'. Không có đảm bảo về hồ sơ nào sẽ được trả lại, nada, niente. 'BTW', tại sao bạn có' DISTINCT' ở đây, mục đích của nó là gì? – Quassnoi
Tôi đang cố gắng đạt được "cung cấp cho tôi tất cả hồ sơ từ thứ tự ngôn ngữ hiện tại theo tên và sau đó cho tất cả các ngôn ngữ khác theo thứ tự" Có nghĩa là: nếu hiện tại lang EN sau đó nhận được tất cả hồ sơ cho EN và sau đó lấy tất cả hồ sơ cho các ngôn ngữ khác. IF trong bảng lang cho một bản ghi có EN, FR trả về giá trị EN.IF trong bảng lang EN không tồn tại trả về bất kỳ lang nào khác – ntan
điều này rất dễ thực hiện với 'JOIN' như được mô tả ở đây: http: // explainextended. com/2009/08/10/fallback-language-name-mysql/nhưng vì một số lý do lạ (mà bạn thậm chí không muốn được yêu cầu) bạn không muốn sử dụng nó. – Quassnoi