10/10/2018, 09:23
ai có lệnh truy vấn lấy 2 mẫu tin trước và sau ko
vd tôi có 1 bảng như sau
1
2
3
4
5
bây giờ chỉ với 1 câu lệnh sql tôi muốn lấy 2 mẫu tin lớn hơn 3 và 2 mẫu tin nhỏ hơn 3 thì làm sao vậy
cảm ơn nha
1
2
3
4
5
bây giờ chỉ với 1 câu lệnh sql tôi muốn lấy 2 mẫu tin lớn hơn 3 và 2 mẫu tin nhỏ hơn 3 thì làm sao vậy
cảm ơn nha
Bài liên quan
vd trường hợp tôi có trường hợp tôi có 1000 mâũ tin trường hợp tôi muốn lâý 2 mâũ tin có id lớn hơn 350 và 2 mâũ tin có id nhỏ hơn 350 thì làm sao vâỵ
ví dụ:
select num from table A where num<350 and num<350-2
union all
select num from table A where num>350 and 350+2
Đúng hay không thì chưa kiểm tra vì đang online ngoài tiệm net.
tên cột là c_num
giá trị mốc là *** (là 3 trong ví dụ của bạn)
thì bạn có thể dùng câu sql:
SELECT *
FROM contents
WHERE c_num
IN (
(
SELECT max( c_num )
FROM contents
WHERE c_num < ***
), (
SELECT max( c_num )
FROM contents
WHERE c_num < (
SELECT max( c_num )
FROM contents
WHERE c_num < *** )
), (
SELECT min( c_num )
FROM contents
WHERE c_num > ***
), (
SELECT min( c_num )
FROM contents
WHERE c_num > (
SELECT min( c_num )
FROM contents
WHERE c_num > *** )
)
)
AND c_num != ***
Regards!!!
select c_num from contents where c_num != {num} and c_num < {num} + 3 and c_num > {num}-3
{
giả thiết:
tên bảng là contents
tên cột là c_num
giá trị mốc là {num}(là 3 trong ví dụ của bạn)
}
Nếu không đúng, xin chỉ giáo vì lâu lắm không viết sql statement nữa....
Regards!!!
SELECT * FROM `table`
WHERE `id` > x
ORDER BY `id` ASC
LIMIT y
SELECT * FROM `table`
WHERE `id` < x
ORDER BY `id` DESC
LIMIT y
=> Giả sử n là số row trg table trên. Chạy 2 câu này thì dbms phải quét qua n+1 row
Còn nếu muốn gọp lại = 1 câu truy vấn thì đây :
(SELECT * FROM `table`
WHERE `id` > x
ORDER BY `id` ASC
LIMIT y)
UNION
(SELECT * FROM `table`
WHERE `id` < x
ORDER BY `id` DESC
LIMIT y)
=> Giả sử n là số row trg table trên. Chạy câu uninon này thì dbms phải quét qua 2n row => ghê vãi
Cậu phải xem lại cách tổ chức thôi,
Với cái table trên thì chắc chắn câu truy vấn nào thỏa đc nhu cầu trên của cậu đều phải quét qua tối thiểu n dòng => toi ngay
Đồng ý với cách của Mahakaruna. Riêng về tốc độ, tớ nghĩ thiết lập index cho `id` (mà hình như đã dùng `id`, thì default nó là key index rồi) của bạn sẽ tăng được tốc độ lên.
1
2
3
4
5
6
7
8
9
20
21
21
cảm ơn anh em nha. Tôi sẽ chạy thử. À tôi ko hiểu cách truy vấn đệ quy ko. Có nghĩa là truy vấn lấy dữ liệu ra rồi lấy dữ liệu vừa truy vấn để tiếp tục làm đk để truy vấn tiếp nữa mà chỉ ở trên 1 dòng