2010-06-24 39 views
6

Xin chào mọi người!Làm thế nào để bỏ qua một cột để chọn riêng biệt trong postgresql?

Tôi có một SQL (xem ở trên) và tôi muốn biết làm thế nào tôi có thể chắc chắn rằng tôi không nhận được gấp đôi liên quan đến tên chỉ. nếu một tên xuất hiện trong lần đầu tiên Chọn nó là chủ và nên bỏ qua trong các lựa chọn sau đây.

"SELECT name, id, 'place' AS tablename FROM places WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'community' AS tablename FROM communities WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'district' AS tablename FROM districts WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'region' AS tablename FROM regions WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."UNION SELECT name, id, 'province' AS tablename FROM provinces WHERE lower(name) LIKE '".strtolower($needle)."%'" 
    ."ORDER BY name LIMIT 10" 

đây là SQL của tôi.

bạn cần biết thêm thông tin?

nhờ

+0

Cảnh báo SQL Injection! –

+0

nó chỉ để thử nghiệm làm thế nào mà hoạt động, bảo mật đến tiếp theo ;-) – helle

+1

bạn có thể cho tôi biết nơi tiêm? Bây giờ tôi đang ở bước bảo mật ;-) – helle

Trả lời

5

DISTINCT

SELECT DISTINCT ON (name) name, id, tablename 
FROM (
    SELECT name, id, 'place' AS ... 
    UNION ... 
    UNION ... 
    UNION ... 
    UNION ...) AS subQuery 
ORDER BY name LIMIT 10 

Chỉ cần chỉ định để chỉ làm riêng biệt trên name bằng cách sử dụng truy vấn của bạn như là một sub-query.

Thực hiện giới hạn và đặt hàng trong thời gian riêng biệt, nếu không, điểm khác biệt có thể loại bỏ hai lần và không từ bỏ toàn bộ 10 hàng theo thứ tự được sắp xếp chính xác.

+0

nếu tôi thêm nó vào mỗi lựa chọn, các bảng khác nhau được chọn disticnt, nhưng trong công đoàn tôi đã tăng gấp đôi. – helle

+0

Rất tiếc, đã bỏ lỡ điều đó. Thử truy vấn đã chỉnh sửa mới. –

+0

cảm ơn ... nhưng không hoạt động chút nào :-( tôi phải sử dụng bí danh cho truy vấn phụ ... Chọn Khác biệt ... TỪ (...) AS subqueryname ORDER ... ngay bây giờ công trinh – helle

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