10/10/2018, 11:40

Cho e hỏi một chút về sql với

Mình đang làm phần các sản phẩm đã xem. Mình dùng cookie và đã lưu đc thành một mảng các id sản phẩm đã xem. Ví dụ: $id = array('6','2','5','4','3','1').
Mình truy vấn vào db và lấy ra các sản phẩm có id tương ứng dùng câu lệnh:
select * from products where id in(6,2,5,4,3,1)
hoặc select * from products where (id=6 OR id=2 OR id=5 OR id=4 OR id=3 OR id=1)
thì lấy ra được danh sách các sản phẩm đã xem tuy nhiên thứ tự của các bản ghi lại bị sắp xếp thành 1,2,3,4,5,6.
Mình muốn các bản ghi vẫn giữ nguyên thứ tự. Các bạn giúp mình với
Mình đã tìm đc 1 cách nhưng xem ra ko đc tối ưu lắm
Code:
select * from products where id = 6
union all
select * from products where id = 2
union all
select * from products where id = 5
union all
select * from products where id = 4
union all
select * from products where id = 3
union all
select * from products where id = 1
saurom_90 viết 13:48 ngày 10/10/2018
ai giúp mình với nào
trannamcn viết 13:41 ngày 10/10/2018
Cái này bác lại foreach cái mảng đó rồi in ra (và select ở trong thì giữ nguyên vị trí
outlier viết 13:43 ngày 10/10/2018
Được gửi bởi trannamcn
Cái này bác lại foreach cái mảng đó rồi in ra (và select ở trong thì giữ nguyên vị trí
Vậy thì lại mất nhiều lần truy vấn vào DB, tốc độ không tối ưu bác ạ

Làm trên SQL tạm thời em chưa nghĩ ra với mảng hỗn độn, nhưng bác có thể trả ra câu lệnh SQL mà bác query theo kiểu mảng có key là ID trỏ tới value là đối tượng bác lấy ra.

Như thế ra ngòai giao diện bác lấy mảng đó ra theo id thì không cần để ý tới thứ tự mảng
saurom_90 viết 13:46 ngày 10/10/2018
Được gửi bởi outlier
Vậy thì lại mất nhiều lần truy vấn vào DB, tốc độ không tối ưu bác ạ

Làm trên SQL tạm thời em chưa nghĩ ra với mảng hỗn độn, nhưng bác có thể trả ra câu lệnh SQL mà bác query theo kiểu mảng có key là ID trỏ tới value là đối tượng bác lấy ra.

Như thế ra ngòai giao diện bác lấy mảng đó ra theo id thì không cần để ý tới thứ tự mảng
bạn có thể nói rõ hơn đc ko? mình chưa hiểu ý bạn
1024KB viết 13:51 ngày 10/10/2018
ý của bạn đó là như thế này:
Code:
$viewed = array(6,2,4,3,1); //danh sách sản phẩm đã xem theo thứ tự
//sau khi query được mảng như thế này hoặc biến đổi nó về như thế này
$queries = array(
    1 => array(
         'title' => 'Product 1',
         //...thuộc tính khác
    ),
    2 => array(
     //...thuộc tính
    ),
   //...tuơng tự
);

//trình bày giao diện
//foreach mảng lưu danh sách sản phẩm đã xem
foreach($viewed as $view_id)
{
     echo $queries[$view_id]['title'];
}
//đúng thứ tự luôn nhỉ?
diepnghitinh viết 13:49 ngày 10/10/2018
cái này dễ mà tự tìm hiểu đi bạn
diepnghitinh viết 13:54 ngày 10/10/2018
đang dùng máy mac os nên ko quen , nghĩ lại thấy trả lời zô duyên quá nên cố reply bạn vậy

dữ liệu
15f703e2fbccef3307500df62b9944ad_43233489.untitled1.png

mysql:
PHP Code:
SELECT FROM mn_product WHERE product_id in (13,10,12ORDER 
BY FIELD
(product_id13,10,12); 
kết quả
e095f7ef70e50e8d72baf5d78f3c1045_43233491.untitled2.png
saurom_90 viết 13:50 ngày 10/10/2018
Xin cảm ơn bạn 1MB và bạn diepnghitinh rất nhiều, cả 2 cách của 2 bạn đều dùng rất ok
caphedakha viết 13:52 ngày 10/10/2018
Xin cảm ơn bạn 1M và bạn diepnghitinh rất nhiều, cả 2 cách của 2 bạn đều dùng rất ok
Bài liên quan
0