需要从MySQL查询中获取数据

时间:2018-09-29 06:48:24

标签: php mysql

我有表名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,等等。
  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;
   }

}

1 个答案:

答案 0 :(得分:0)

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

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;
}

此代码 未经测试,因为这样的递归可能非常危险。如果您有任何疑问或要完成的工作的更好示例,我很乐意提供更多帮助。