PDA

View Full Version : mới học lập trình php xin giúp giùm lấy thông tin từ 2 bảng trong csdl mysql



phuonganhth222
26-07-2012, 20:46
Các anh trong diễn đàn giúp em với. em có 2 bảng dữ liệu trong mysql như sau:

bảng danh mục bài viết: categories
cate_id
cate_name

bảng bài viết: contents
content_id
content_title
content_img
content_details
cate_id

giờ em phải viết truy vấn sql làm sao để có thể lấy được tất cả thông tin của tất cả các cột từ 2 bảng với điều kiện cate_id = giá trị bất kỳ.
em có viết như vầy
SELECT * FROM contents INNER JOIN categories ON contents . cate_id = categories . cate_id WHERE cate_id = $_GET['id']

nhưng mà không chạy được, chắc là em viết sai rồi. em mới học các anh giúp em làm cái này với.

antipro.vn
26-07-2012, 21:47
INNER JOIN thì mình không có xài nên không biết. Nhưng mà mình làm nó sẽ như thế này:


SELECT * FROM contents ,categories WHERE contents . cate_id = categories . cate_id AND cate_id = $_GET['id']

Btw, thông thường khi làm web, người ta sẽ không làm như vậy mà sẽ dùng 2 câu query đơn lẻ

SELECT * FROM contents WHERE cate_id = $_GET['id']


SELECT * FROM categories WHERE cate_id = $_GET['id']

phuonganhth222
26-07-2012, 22:42
Bạn đã chạy thử chưa? không được bạn ơi, nó vẫn báo lỗi cate_id

trannamcn
27-07-2012, 06:20
Tách ra 2 câu truy vấn bạn ơi !! Sài inner join giảm hiệu xuất xuống lắm đó !!! >> Thực hiện truy vấn key -> value để đạt hiệu quả tốt nhất bạn nhé !
P/s: Đừng dùng * lấy cụ thể các trường cần thiết cho dù bạn có muốn lấy hết đi chăng nữa nhé !

-> Bạn nên xem mấy bài viết tối ưu hiệu suất cho các câu lệnh truy vấn


SELECT * FROM contents ,categories WHERE contents . cate_id = categories . cate_id AND cate_id = $_GET['id']
Sài như bác này viết , cực kỳ khổ cho CSDL hiệu suất tệ hơn inner join !!

>> Bạn up file sql lên cho mọi người giúp bạn !! Mất thời gian tạo db cho bạn lắm :D

phuonganhth222
27-07-2012, 07:34
Híc, em mới học php mà. những cái cao siêu em chưa dám học, cái dễ nhất như trên em đã nói đó là lọc ra thông tin chi tiết của một bản ghi chứa đầy đủ thông tin của các cột từ 2 bảng trên, em làm cũng còn chưa được. anh nào giúp em với.

thienha20
27-07-2012, 08:53
SELECT * FROM contents INNER JOIN categories ON contents . cate_id = categories . cate_id WHERE cate_id = $_GET['id']

Câu join này không chạy được do 2 bản đều có cate_id nó không phân biệt được sửa "*" thành "contents.*, categories.cate_name". Để xử lý nhanh thì không nên dùng join chỗ này vì nó sẽ làm thừa dữ liệu lấy lên.
- mốc 1 dòng của category lên theo $_GET['id']
- mốc nhiều dòng của contents lên theo $_GET['id']
sau đó view ra

haibuihoang
27-07-2012, 08:54
Như bạn antipro đã chỉ ra đó, trường hợp này với 1 cate_id thì chỉ có 1 dòng trong bảng categories vì thế dùng 2 queries đơn sẽ tiết kiệm hiệu năng hơn nhiều với lệnh JOIN. Còn nếu không INNER JOIN được thì bạn dùng LEFT JOIN xem.

Ngoài ra, bạn nên xử lý filter $_GET['id'] trước khi nét vào query để tránh các lỗi bảo mật nhé.

moonleej
28-07-2012, 13:20
Dùng câu truy vấn kết đi bạn (theo Cate_id)

luong.minhson
30-07-2012, 16:48
SELECT * FROM contents ,categories WHERE contents . cate_id = categories . cate_id AND cate_id = $_GET['id']
minh cung lam theo cách này, ok mà