2012-03-16 20 views
6

Tôi có vấn đề với truy vấn SQL này:"Không thể sử dụng tại khoản TRÌNH TỰ toàn cầu" với mysql đặt hàng

(SELECT tb1.id,tb1.bdate,tb1.jumpCard,tb1.publicImage,tb1.lastlogin 
FROM users AS tb1, online AS tb2 
WHERE tb1.valid='1' AND tb1.sex='female' AND tb1.looking_for='male' AND tb1.id = tb2.member_id 
ORDER BY tb1.publicImage) ORDER BY tb1.id DESC 

đối với một số lý do tôi nhận được:

Table 'tb1' from one of the SELECTs cannot be used in global ORDER clause 

lời khuyên nào?

Cảm ơn

Trả lời

8

Lý do nó không hoạt động là ngoài ORDER BY không thể "nhìn thấy" TB1 - nó thấy các kết quả của subquery nội . Vì vậy, trong một phiên bản đúng cú pháp truy vấn của bạn, bạn sẽ chỉ đơn giản là ORDER BY id:

(SELECT tb1.id,tb1.bdate,tb1.jumpCard,tb1.publicImage,tb1.lastlogin 
FROM users AS tb1, online AS tb2 
WHERE tb1.valid='1' AND tb1.sex='female' AND tb1.looking_for='male' AND tb1.id = tb2.member_id 
ORDER BY tb1.publicImage) ORDER BY id DESC 

Nhưng, như những người khác được chỉ ra, điều này có thể đơn giản hơn bằng văn bản như một truy vấn đơn đặt hàng bởi id

+0

Bạn đã tiết kiệm của tôi đời sống –

3

Nếu bạn đặt dấu ngoặc xung quanh bạn select sau đó bảng bên trong sẽ không được hiển thị bên ngoài

SELECT tb1.id,tb1.bdate,tb1.jumpCard,tb1.publicImage,tb1.lastlogin 
FROM users AS tb1, online AS tb2 
WHERE tb1.valid='1' AND tb1.sex='female' AND tb1.looking_for='male' AND tb1.id = tb2.member_id 
ORDER BY tb1.publicImage, tb1.id DESC 

Và bạn có thể chỉ định nhiều cột trong một order by khoản

2

Khi bạn đóng của bạn dấu ngoặc đơn sau khi câu lệnh chọn, mệnh đề order by thứ hai của bạn trở nên không hợp lệ. Thay vì cố gắng sáp nhập đặt hàng của bạn bằng cách cột trong một order by tuyên bố duy nhất như sau:

SELECT tb1.id,tb1.bdate,tb1.jumpCard,tb1.publicImage,tb1.lastlogin 
FROM users AS tb1, online AS tb2 
WHERE tb1.valid='1' AND tb1.sex='female' AND tb1.looking_for='male' AND tb1.id = tb2.member_id 
ORDER BY tb1.publicImage, tb1.id DESC 
Các vấn đề liên quan