繁体   English   中英

需要从 MySQL 查询中获取数据

[英]Need to fetch data from MySQL query

我有表名reffer ,其中包含在 MySQL 查询下面给出的记录。

CREATE TABLE `reffer` (
      `reffer_id` int(11) NOT NULL,
      `seller_id` int(11) NOT NULL,
      `register_id` int(11) NOT NULL,
      `level` int(11) NOT NULL,
      `reffer_by` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    --
    -- Dumping data for table `reffer`
    --

    INSERT INTO `reffer` (`reffer_id`, `seller_id`, `register_id`, `level`, `reffer_by`) VALUES
    (1, 462, 580, 1, 462),
    (2, 462, 581, 2, 580),
    (3, 462, 582, 2, 580),
    (4, 580, 583, 2, 580),
    (5, 462, 584, 3, 583),
    (6, 462, 585, 4, 584),
    (7, 462, 586, 5, 585),
    (8, 462, 587, 6, 586);

我需要一个 mysql 查询或 php 函数来获取由 register_id = 580 引用的所有用户。

  1. 在此图像中,580 由 462 和 581,582,583 引用,所有这些由 580 和 584 引用由 583 引用,585 由 586 引用,依此类推。
  2. 582 没有找到孩子。
  3. 583 有 584,585,586,587
  4. 580 有 581 到 5587

我需要这种类型的查询来找到像 2,3,4 点这样的记录。

我试过 mysql 查询,但没有得到相同的结果。

select * from reffer where reffer_by = 582

但没有得到正确的结果。

我也尝试过它用于 php 中的嵌套函数,例如:

function reffered($user_id=null,$refferedData=null){
   if(count($refferedData) == 0 || empty($refferedData)){
    $refferedData = array();
   }

   $sql_refer = mysql_query("select register_id from reffer where reffer_by = ".$user_id);
   $rows_reffer = mysql_fatch_assoc($sql_refer);
   $count_reffer = mysql_num_rows($sql_refer);
   if($count_reffer != 0){
    $refferedData[] = $rows_reffer['register_id'];

    reffered($rows_reffer['register_id'],$refferedData);
   }else{
       return $refferedData;
   }

}

您的代码中有很多问题,我将继续重写您的函数并使用注释来解释我的想法和修复。

function reffered($user_id=null,$refferedData=null){
     // as $refferedData defaults to a non-array (null) we 
     // should check if it is an array, then if it's empty 
     if(!is_array($refferedData) || empty($refferedData)){
          $refferedData = array();
     }

     // your original code was NOT sql injection safe (see https://en.wikipedia.org/wiki/SQL_injection)
     // this code forces the user input to be a safe integer
     $query = sprintf('select register_id from reffer where reffer_by = %d', $user_id);

     // this assumes we've already got a valid mysql_connect() running somewhere
     $sql_refer = mysql_query($query);

     // we should check if we have results FIRST before running the fetch_assoc
     if(mysql_num_rows($sql_refer)) {
          // we loop through the results and add register_id to the array stack,
          // while passing in the register_id to the next recursion
          while($row = mysql_fetch_assoc($sql_refer)){
               $refferedData[] = $row['register_id'];
               $refferedData = refferedData($row['register_id'], $refferedData);
          }
     }
    return $refferedData;
}

此代码未经测试的,因为递归像这样是非常危险的。 如果您有任何问题或您想要完成的更好的例子,我很乐意提供更多帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM