Video
-------
id
source_low
source_med
source_high
Source
--------
id
duration
thumbnail
Các mục video có thể chứa ít nhất 1 hay tối đa 3 của nguồn (nguồn thấp, nguồn med, cao nguồn).Lấy giá trị trong bảng là một số cột là null trong MYSQL
Ý tưởng cũng giống như youtube, điều đó có nghĩa là một bản ghi video có thể chứa một số chất lượng. Vì vậy, khi tôi trả về thời lượng/hình thu nhỏ, tôi muốn kiểm tra xem nguồn nào tồn tại và trả về một trong số chúng.
Ví dụ: nếu video có source_low hoặc source_med, điều đó có nghĩa là có thời lượng là & hình thu nhỏ cho source_low và source_med, sau đó tôi chỉ cần trả lại một trong hai.
CodeIgniter cú pháp:
$this->db->select('v.*, sl.duration, sm.duration as duration_m, sh.duration as duration_h, sl.thumbnail, sm.thumbnail as thumbnail_m, sh.thumbnail as thumbnail_h');
$this->db->from('video as v');
$this->db->join('source as sl', 'v.source_low = sl.video_id', 'left');
$this->db->join('source as sm', 'v.source_med = sm.video_id', 'left');
$this->db->join('source as sh', 'v.source_high = sh.video_id', 'left');
$this->db->group_by('v.id');
SQL (thumbnail là cùng một cách để có được):
SELECT v.*, sl.duration, sm.duration as duration_sm, sh.duration as duration_sh
FROM video as v
LEFT JOIN source as sl ON (v.source_low = sl.video_id)
LEFT JOIN source as sm ON (v.source_med = sm.video_id)
LEFT JOIN source as sh ON (v.source_high = sh.video_id)
GROUP BY v.id;
Ngay bây giờ tôi có thể trả lại toàn bộ kết quả, bao gồm giá trị null, nhưng làm thế nào tôi có thể chỉ trả lại một thời lượng và một hình thu nhỏ?
Cảm ơn vì đã giúp
Cập nhật:
Chỉ cần cập nhật các truy vấn nhưng có vẻ như CodeIgniter có một số sai sót trong xử lý nó, bất kỳ ý tưởng? Cảm ơn
Mã của tôi:
$this->db->select('v.*, COALESCE(b.duration, bt.duration, bc.duration) AS duration, COALESCE(b.thumbnail, bt.thumbnail, bc.thumbnail) AS thumbnail');
Và trong SQL:
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS duration, COALESCE(b.thumbnail, `bt`.`thumbnail`, `bc`.`thumbnail)` AS thumbn' at line 1
SELECT `v`.*, `t`.`name`, `t`.`name_tw`, `t`.`name_cn`, COALESCE(b.duration, `bt`.`duration`, `bc`.`duration)` AS duration, COALESCE(b.thumbnail, `bt`.`thumbnail`, `bc`.`thumbnail)` AS thumbnail FROM (`video` as v) JOIN `teacher` as t ON `v`.`teacher_id` = `t`.`id` LEFT JOIN `brightcove` as b ON `v`.`video` = `b`.`video_id` LEFT JOIN `brightcove` as bt ON `v`.`video_tw` = `bt`.`video_id` LEFT JOIN `brightcove` as bc ON `v`.`video_cn` = `bc`.`video_id` WHERE `v`.`is_delete` = 0 AND `v`.`type` = 0 GROUP BY `v`.`id` ORDER BY `v`.`start_date` desc
Đây là một câu hỏi hay nhưng khó gỡ lỗi SQL của bạn vì nó chứa trong tất cả các chuỗi 'php' không liên quan. Loại bỏ chúng và chỉ cho chúng tôi thấy SQL và chúng tôi sẽ có thể trợ giúp! – LondonRob
Cảm ơn. xin lỗi vì khó hiểu, đó là truy vấn codeigniter và tôi chuyển nó sang SQL một – user782104
Thông báo lỗi bạn đã thêm không khớp với mã bạn có ở đó. – vhu