Php 显示右表中的最新记录,如果记录不可用,则至少显示左表中的记录

Php 显示右表中的最新记录,如果记录不可用,则至少显示左表中的记录,php,mysql,Php,Mysql,我有两张桌子 tbl_寄存器 tbl_societymyprofile 我要做的是,我必须显示tbl_register表中的记录,并且我必须显示tbl_societymyprofile表中的最新记录 我尝试了下面的查询 SELECT * FROM tbl_register AS r LEFT JOIN tbl_societymyprofile AS m ON r.reg_id = m.reg_id WHERE r.reg_id =(SELECT M

我有两张桌子

  • tbl_寄存器
  • tbl_societymyprofile
  • 我要做的是,我必须显示
    tbl_register
    表中的记录,并且我必须显示
    tbl_societymyprofile
    表中的最新记录

    我尝试了下面的查询

    SELECT *
    FROM   tbl_register AS r
           LEFT JOIN tbl_societymyprofile AS m
                  ON r.reg_id = m.reg_id
    WHERE  r.reg_id =(SELECT Max(secretary_id) AS c_id
                       FROM   tbl_societymyprofile
                       WHERE  reg_id = 17
                       GROUP  BY reg_id DESC)
           AND r.is_active = 1 
    
    此外,如果记录在
    tbl_societymyprofile
    中不可用,则至少显示
    tbl_注册表中的记录

    reg_id
    id是
    tbl_寄存器的主id
    表。到目前为止,我在
    tbl_register
    表中有记录,但在
    tbl_societymyprofile
    中没有记录,我得到的是空记录

    tbl\u寄存器

    reg_id | name | mobileno  | email     
    1      | abc  |1234123455 |  abc@gmail.com
    2      | xyz  |1234345455 |  xyz@gmail.com
    
    tbl_societymyprofile

    secretary_id | reg_id | sec_name | sec_email     | date_of_added
    1            | 1      | ncx      | ncx@gmail.com | 2021-06-09 15:54:35
    2            | 1      | xbs      | ncx@gmail.com | 2021-06-09 15:55:18
    

    你能帮我解决这个问题吗?

    试试下面的查询……它将给出左表中的所有行

    SELECT r.*, X.*
    FROM   tbl_register AS r
           LEFT JOIN (select sp.* from tbl_societymyprofile sp
                        INNER JOIN(
                        select reg_id, MAX(secretary_id) secretary_id
                        FROM tbl_societymyprofile
                        GROUP BY reg_id)T ON sp.reg_id = T.reg_id and sp.secretary_id = T.secretary_id
                     ) X ON r.reg_id = X.reg_id
    
    您是否需要tbl_register中的所有记录或基于注册id的特定记录。如果您需要所有记录,则上述查询将起作用。 如果您需要特定的查询,请使用下面的查询

    SELECT r.*, X.*
    FROM   tbl_register AS r
           LEFT JOIN (select sp.* from tbl_societymyprofile sp
                        INNER JOIN(
                        select reg_id, MAX(secretary_id) secretary_id
                        FROM tbl_societymyprofile
                        GROUP BY reg_id)T ON sp.reg_id = T.reg_id and sp.secretary_id = T.secretary_id
                     ) X ON r.reg_id = X.reg_id
    WHERE r.reg_id=2
    

    尝试下面的查询…它将给出左表中的所有行

    SELECT r.*, X.*
    FROM   tbl_register AS r
           LEFT JOIN (select sp.* from tbl_societymyprofile sp
                        INNER JOIN(
                        select reg_id, MAX(secretary_id) secretary_id
                        FROM tbl_societymyprofile
                        GROUP BY reg_id)T ON sp.reg_id = T.reg_id and sp.secretary_id = T.secretary_id
                     ) X ON r.reg_id = X.reg_id
    
    您是否需要tbl_register中的所有记录或基于注册id的特定记录。如果您需要所有记录,则上述查询将起作用。 如果您需要特定的查询,请使用下面的查询

    SELECT r.*, X.*
    FROM   tbl_register AS r
           LEFT JOIN (select sp.* from tbl_societymyprofile sp
                        INNER JOIN(
                        select reg_id, MAX(secretary_id) secretary_id
                        FROM tbl_societymyprofile
                        GROUP BY reg_id)T ON sp.reg_id = T.reg_id and sp.secretary_id = T.secretary_id
                     ) X ON r.reg_id = X.reg_id
    WHERE r.reg_id=2
    

    如果您的联接表顺序不重要(通常不重要),那么您可能应该尝试以下方法:

    SELECT * FROM tbl_register t LEFT JOIN tbl_societymyprofile s USING(reg_id) WHERE t.reg_id=2 ORDER BY s.date_of_adder DESC LIMIT 1;
    

    这是一个例子。请参见
    Query#3

    如果您的联接表顺序不重要(通常不重要),那么您可能应该尝试以下方法:

    SELECT * FROM tbl_register t LEFT JOIN tbl_societymyprofile s USING(reg_id) WHERE t.reg_id=2 ORDER BY s.date_of_adder DESC LIMIT 1;
    

    这是一个例子。请参阅
    Query#3

    给我一些时间检查。获取错误#1051-未知表“x”您使用的是哪个数据库和哪个版本。尽管此查询应适用于所有数据库。使用X*,然后选中。可能是您数据库中的案例问题。X在一个小案例中。。现在我添加了caps并获得了一些输出。我需要知道我应该在何处添加where条件以获取用户的单个记录例如,我必须使用注册表中的reg_id 2来获取输出给我一些时间来检查。Getting error#1051-未知表“x”使用哪个数据库和哪个版本。尽管此查询应适用于所有数据库。使用X*,然后选中。可能是您数据库中的案例问题。X在一个小案例中。。现在我添加了caps并获得了一些输出。我需要知道我应该在何处添加where条件以获取用户的单个记录例如,我必须使用register表中的reg_id 2来获取outputwo。简单易用。是的,它在工作。我这边的投票。你在用哪个数据库?是mysql吗?“使用(注册号)”是否等同于表1.注册号=表2.注册号?哇。简单易用。是的,它在工作。我这边的投票。你在用哪个数据库?是mysql吗?“使用(注册号)”是否等同于表1.注册号=表2.注册号?