10/10/2018, 10:50

Nhờ cao thủ CodeIgniter giúp đỡ

Ví dụ mình có 3 table trong CSDL
Code:
news_section(news_sec_id, news_sec_name);
news_category(news_cat_id, news_sec_id, news_cat_name);
news_article(news_art_id, news_cat_id, news_art_title);
Câu lệnh SQL bình thường để lấy ra thông tin news_art_title, news_cat_name, news_sec_name từ 3 tabale trên là
PHP Code:
SELECT news_art_titlenews_cat_namenews_sec_name
FROM news_section
news_categorynews_article
WHERE news_article
.news_cat_id news_category.news_cat_id
AND news_category.news_sec_id news_section.news_sec_id 
Mình hỏi vậy trong CodeIgniter muốn làm công việc như trên thì phải viết như nào?

Mình đã viết như vầy trong CodeIgniter
PHP Code:
$this->load->database();
$this->db->select('news_art_title, news_cat_name, news_sec_name');
$this->db->from('news_article, news_category, news_section');
$this->db->where('news_article.news_cat_id''news_category.news_cat_id');
$this->db->where('news_category.news_sec_id''news_section.news_sec_id');
$this->db->limit(5);
$query $this->db->get();
return 
$query->result(); 
Mặc dù không báo lỗi nhưng cũng không get được data. Bạn nào biết giúp mình với, Mình cám ơn nhiều !
s.code viết 13:02 ngày 10/10/2018
Thứ nhất bạn đang xài CI phiên bản nào? Vì mấy phiên bản cũ của CI đôi khi render ra câu truy vấn nhưng bị mất tham số.

Thứ 2 là bạn cố tình viết sai 1 tên field trong câu select xem => lúc đó nó lỗi và xuất ra câu truy vấn được class DB của CI nó render ra. Đối chiếu xem có đúng như câu truy vấn bạn mong muốn hay không.

Thứ 3 nếu trường hợp trên bạn nên viết như sau:

$this->load->database();
$this->db->select('A.news_art_title, B.news_cat_name, C.news_sec_name');
$this->db->from('news_article A');
$this->db->join('news_category B', 'A.news_cat_id = B.news_cat_id');
$this->db->join('news_section C', 'B.news_sec_id = C.news_sec_id');
$this->db->limit(5);
$query = $this->db->get();
return $query->result();
tuanit85 viết 12:58 ngày 10/10/2018
Thứ nhất bạn đang xài CI phiên bản nào? Vì mấy phiên bản cũ của CI đôi khi render ra câu truy vấn nhưng bị mất tham số.
Mình đang dùng bản mới nhất
Thứ 2 là bạn cố tình viết sai 1 tên field trong câu select xem => lúc đó nó lỗi và xuất ra câu truy vấn được class DB của CI nó render ra. Đối chiếu xem có đúng như câu truy vấn bạn mong muốn hay không.
Mình cũng đã từng thử rồi, và kết quả render là một truy vấn hoàn toàn đúng nhưng vẫn không chạy, hic
Thứ 3 nếu trường hợp trên bạn nên viết như sau:

$this->load->database();
$this->db->select('A.news_art_title, B.news_cat_name, C.news_sec_name');
$this->db->from('news_article A');
$this->db->join('news_category B', 'A.news_cat_id = B.news_cat_id');
$this->db->join('news_section C', 'B.news_sec_id = C.news_sec_id');
$this->db->limit(5);
$query = $this->db->get();
return $query->result();
Trước đó mình cũng đã dùng cách này nhưng phương thức join trong lớp CI_DB_active_record không xử lý được, chắc nó không hiểu và báo lỗi tùm lum
1024KB viết 13:02 ngày 10/10/2018
Đôi khi mình không dùng được cách trên thì mình dùng:
PHP Code:
$sql "SELECT news_art_title, news_cat_name, news_sec_name
FROM news_section, news_category, news_article
WHERE news_article.news_cat_id = news_category.news_cat_id
AND news_category.news_sec_id = news_section.news_sec_id "
;
return 
$this->db->query($sql)->result(); 
s.code viết 13:05 ngày 10/10/2018
Được gửi bởi tuanit85

Mình cũng đã từng thử rồi, và kết quả render là một truy vấn hoàn toàn đúng nhưng vẫn không chạy, hic
Bạn vác câu truy vấn đó quăng vào phpMyadmin thử coi xem nó ra ra dc record nào không. Nếu không thì dữ liệu của bạn không thỏa hoặc bị mất toàn vẹn dữ liệu bởi 1 lý do nào đó.

Nếu vẫn ra thì xem kỹ lại phần bạn sô ra ở view coi có nhầm lẫn gì không (Tốt nhất bỏ đoạn đó lên đây nốt đi).
Được gửi bởi tuanit85
Trước đó mình cũng đã dùng cách này nhưng phương thức join trong lớp CI_DB_active_record không xử lý được, chắc nó không hiểu và báo lỗi tùm lum
Trường hợp này đơn giản mà sao bạn kêu nó không sử lý được. Cậu thử test cái tôi viết trên xem có ra câu truy vấn không.
tuanit85 viết 12:55 ngày 10/10/2018
Được rồi bạn à, tại mệt quá, hoa hết cả mắt :p. giờ mình muốn thêm tiếp vào đó
Code:
WHERE news_sec_id = 2
thì phải viết như nào? Cám ơn bạn nhiều !
xcode viết 13:02 ngày 10/10/2018
Cái thằng codeigniter này hồi xưa cũng có mò qua, nhưng bỏ lâu quá rồi
s.code viết 12:55 ngày 10/10/2018
PHP Code:
$this->load->database();
$this->db->select('A.news_art_title, B.news_cat_name, C.news_sec_name');
$this->db->from('news_article A');
$this->db->join('news_category B''A.news_cat_id = B.news_cat_id');
$this->db->join('news_section C''B.news_sec_id = C.news_sec_id');

$this->db->where('C.news_sec_id'2);

$this->db->limit(5);
$query $this->db->get();
return 
$query->result(); 
tuanit85 viết 12:51 ngày 10/10/2018
Cám ơn sự nhiệt tình của bạn!
luonganhtung2810 viết 12:51 ngày 10/10/2018
các anh ơi ai có giáo trình hay tài liệu học CI 172 dễ hiểu và đầy đủ từ đầu không ạ? cho em xin vì em mới vào ngành nên chưa biết gì về CI mong các anh đừng cười.
Bài liên quan
0