Nhờ các anh hướng dẫn truy vấn phép kết nối dữ liệu từ nhiều bảng

Thảo luận trong 'Hỗ trợ modules' đăng bởi hoangvtien, 09/07/2016 09:20.

  • Các anh xem qua code hướng dẫn em cách lấy dữ liệu với 2 bảng 

    // Lop
    $sql_create_module[] = "CREATE TABLE " . $db_config['prefix'] . "_" . $lang . "_" . $module_data . "_lop (
      id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      lopname varchar(255) NOT NULL DEFAULT '',
      idhs varchar(255) NOT NULL DEFAULT '',
      numview mediumint(8) unsigned NOT NULL DEFAULT '0',
      description mediumtext NOT NULL,
      active smallint(2) NOT NULL DEFAULT '0',
      addtime int(11) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (id)
    ) ENGINE=MyISAM";
    
    // Ho sinh
    $sql_create_module[] = "CREATE TABLE " . $db_config['prefix'] . "_" . $lang . "_" . $module_data . "_hs (
      id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      hotenhs varchar(100) NOT NULL DEFAULT '',
      thumb varchar(255) NOT NULL DEFAULT '',
      introduction text NOT NULL,
      PRIMARY KEY (id)
    ) ENGINE=MyISAM";

     

    Em dùng cách Join bảng nhưng chỉ lấy được idhs của bảng lớp còn hotenhs trong bảng hs không sao lấy được toàn ra trống không.

    $sql = "SELECT a.id, a.lopname, a.idhs, b.hotenhs FROM `" . NV_PREFIXLANG . "_" . $module_data . "_lop` AS a LEFT JOIN `" . NV_PREFIXLANG . "_" . $module_data . "_hs` AS b ON a.idhs=b.id WHERE a.active=1 ORDER BY a.addtime DESC LIMIT 0,30";

     

    Ngoài cách join bảng như trên hay có cách nào lấy được dữ liệu hotenhs trong bảng hs cùng 1 lớp, em đang tập viết module nên cách anh thông cảm trình bày như vậy. Mong được giúp đỡ..

     

     
    Lần sửa cuối bởi một điều hành viên: 09/07/2016 18:47
  • Fortresssnl

    Fortresssnl xzusafmewnazxwpGP zvusafmegmqhc3dGP

    Cái này code bạn đâu có sai. Bữa mình mail ròi mà ...

     
  • Vậy sao không lấy được hotenhs trong bảng join hs mà lấy idhs trong bảng lớp thì được. Anh xem có cách truy vấn nào khác không, hướng dẫn giúp em với.

     
  • Fortresssnl

    Fortresssnl xzusafmewnazxwpGP zvusafmegmqhc3dGP

     

    Kết quả trả về này.

     
  • Fortresssnl

    Fortresssnl xzusafmewnazxwpGP zvusafmegmqhc3dGP

    Còn nếu sau này truy vấn nó phức tạp hơn thì bạn xây dựng 3 bảng thay vì 2 bảng rồi join.

    Trước mình cũng bị cái đấy.

     

    Nhưng giờ bạn có bảng _lop và _hoc_sinh chẳng hạn.

    Giờ thêm bẳng _doi_chieu

     

    Bảng _lop chỉ chứa thông tin lớp. Bản _hoc_sinh chỉ chứa thông tin học sinh.

    Bảng _doi_chieu sẽ có cấu trúc

    id

    id_lop

    id_hocsinh

     

    Xử lý dữ liệu đầu vào hơi khó hơn như khi xuất ra thì bạn có nhiều phương án để làm hơn.

    Cách làm thì tương tự phần blocks của module News hiện giờ đang dùng vậy.

     
  • Em cũng thấy lạ kì vậy mò hoài không biết lỗi ở chỗ nào mà không hiện thị được họ tên hs, bảng dữ liệu đủ cả id, họ tên cũng ok cả mà truy vấn lại không hiện thị nữa. Cảm ơn anh để em xóa đi cài lại xem thế nào.

     
  • Fortresssnl

    Fortresssnl xzusafmewnazxwpGP zvusafmegmqhc3dGP

    DB mình dùng bài của bạn để tạo mẫu tham khảo:

    CREATE TABLE nv429_vi_test_lop (
    
      id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    
      lopname varchar(255) NOT NULL DEFAULT '',
    
      idhs varchar(255) NOT NULL DEFAULT '',
    
      numview mediumint(8) unsigned NOT NULL DEFAULT '0',
    
      description mediumtext NOT NULL,
    
      active smallint(2) NOT NULL DEFAULT '0',
    
      addtime int(11) unsigned NOT NULL DEFAULT '0',
    
      PRIMARY KEY (id)
    
    ) ENGINE=MyISAM
    
    CREATE TABLE nv429_vi_test_hs (
    
      id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
    
      hotenhs varchar(100) NOT NULL DEFAULT '',
    
      thumb varchar(255) NOT NULL DEFAULT '',
    
      introduction text NOT NULL,
    
      PRIMARY KEY (id)
    
    ) ENGINE=MyISAM
    
    SELECT a.id, a.lopname, a.idhs, b.hotenhs FROM `nv429_vi_test_lop` AS a LEFT JOIN `nv429_vi_test_hs` AS b ON a.idhs=b.id WHERE a.active=1 ORDER BY a.addtime DESC LIMIT 0,30

    File đính kèm là DB test.

     

     
  • Fortresssnl

    Fortresssnl xzusafmewnazxwpGP zvusafmegmqhc3dGP

    Quên. Cục DB. 

     

    Tệp đính kèm:

    • test.zip
      Dung lượng:
      985 bytes
      Lượt xem:
      3
  • Cảm ơn anh đã trợ giúp wink

     
  • Fortresssnl

    Fortresssnl xzusafmewnazxwpGP zvusafmegmqhc3dGP

    Dạ không có gì.

    Chúc bạn thành công ! surprise

     

Chia sẻ trang này

Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây