php - mysqli_multi_query() 重复获取 null

标签 php mysql mysqli mysqli-multi-query

我正在尝试使用 mysqli_multi_query() 从多个表中获取所有了解“Photoshop”的用户及其所有详细信息。我也得到了结果,但是也有一些不速之客以及正确的结果是空的。他们为什么会在这里?

代码和输出如下:

<?php
    $sql = "SELECT user_id FROM ts_users_skills WHERE skillsTeach='Photoshop'";
    if($res = mysqli_query($conn,$sql)) {
        while ($id=mysqli_fetch_array($res)) {
                $id=$id['user_id'];
                // echo($id);
                $get_teachers_details="SELECT * FROM ts_students_log WHERE user_id='$id';";
                $get_teachers_details.="SELECT * FROM ts_students_info WHERE user_id='$id';";
       if (mysqli_multi_query($conn,$get_teachers_details))
        {
            do
                {
    // Store first result set
                if ($mul_res=mysqli_store_result($conn)) {
                  // Fetch one and one row
                  while ($row=mysqli_fetch_assoc($mul_res))
                    {
                    // printf("%s\n",$row['mobile']);
                         // print_r($row);
                        echo "Id: " . $row['user_id']. " Mobile: " . $row['mobile']. "Email:-" . $row['email'] . "Name:-" .$row['name'] . "<br/>";      
                    }           
                  //            Free result set         
                  mysqli_free_result($mul_res);         
                  }
                }
    while (mysqli_next_result($conn));
}
}
}
?>

输出:

     Id: 3 Mobile: 7895447755Email:-aditya@chutiya.comName:-
     Id: 3 Mobile: Email:-Name:-Aditya Porwal
     Id: 4 Mobile: 9300010740Email:-rishabhgaandu@gmail.comName:-
     Id: 4 Mobile: Email:-Name:-Rishabh Agrawal

最佳答案

合并您的查询以获得一个您可以随意排序的结果集:

SELECT 
    a.`user_id`,
    b.*,
    c.*
FROM ts_users_skills a
LEFT JOIN ts_students_log b
    ON a.`user_id` = b.`user_id`
LEFT JOIN ts_students_info c
    ON a.`user_id` = c.`user_id`
WHERE a.`skillsTeach` = 'Photoshop'
ORDER BY a.`user_id`;

我使用了 LEFT JOIN,但是如果所有用户在 ts_students_info 和 ts_students_info 中都有行,您可以将它们更改为仅 JOIN

编辑

要在下面的评论中回答您的问题,选择多项技能,请将 where 子句更改为类似以下内容:

WHERE  a.`skillsTeach` in ('Photoshop','Video Editing','Web Design')

WHERE  a.`skillsTeach` = 'Photoshop'
    OR a.`skillsTeach` = 'Video Editing'
    OR a.`skillsTeach` = 'Web Design'

关于php - mysqli_multi_query() 重复获取 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50310085/

相关文章:

php - 使用 foreach() 从 PHP 数组值更新 SQL 数据库表

php - MySQL的插入查询在PHP失败

php - Laravel Eloquent Query 根据设定的条件查询多条记录

MySQL:创建一个由不同表中其他三个列的值组成的列

PHP/MySQL 程序概要

php - 如何对列中包含某些 item_id 的列求和,相应的状态 = 待处理

php - 如何向bind_param添加特殊条件?

php/ajax REMOTE_ADDR 设置为伪造网络适配器的 IP

php - 删除多页重新加载问题

php - Zend 异常行为 : can not process 2nd request when 1st request still running