Tìm kiếm nhanh

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.

  • hoangvtien

    hoangvtien hoang tiến

    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
  • anhyeuviolet

    anhyeuviolet Kenny Nguyen

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

     
  • hoangvtien

    hoangvtien hoang tiến

    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.

     
  • anhyeuviolet

    anhyeuviolet Kenny Nguyen

     

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

     
  • anhyeuviolet

    anhyeuviolet Kenny Nguyen

    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.

     
  • hoangvtien

    hoangvtien hoang tiến

    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.

     
  • anhyeuviolet

    anhyeuviolet Kenny Nguyen

    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.

     

     
  • anhyeuviolet

    anhyeuviolet Kenny Nguyen

    Quên. Cục DB. 

     

    Tệp đính kèm:

    • test.zip
      Dung lượng:
      985 bytes
      Lượt xem:
      2
  • hoangvtien

    hoangvtien hoang tiến

    Cảm ơn anh đã trợ giúp wink

     
  • anhyeuviolet

    anhyeuviolet Kenny Nguyen

    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