Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取除列中的数据以外的数据_Php_Mysql - Fatal编程技术网

Php 获取除列中的数据以外的数据

Php 获取除列中的数据以外的数据,php,mysql,Php,Mysql,因此,我有以下代码: require_once('db.php'); $getUsers = mysqli_query($db, 'SELECT * FROM users'); $rows = []; while ($r = mysqli_fetch_assoc($getUsers)) { $rows[] = $r; $getSkills = mysqli_query($db, "SELECT * FROM skills WHERE id = '" . $r['id'] .

因此,我有以下代码:

require_once('db.php');

$getUsers = mysqli_query($db, 'SELECT * FROM users');
$rows = [];

while ($r = mysqli_fetch_assoc($getUsers)) {
    $rows[] = $r;
    $getSkills = mysqli_query($db, "SELECT * FROM skills WHERE id = '" . $r['id'] . "'");
    while($r = mysqli_fetch_assoc($getSkills)) {
        $rows['skills'] = $r;
    }
}


print(json_encode($rows));
哪些产出:

[{"id":"1","name":"user1","skills":{"woodcutting":"6","mining":"10"}},{"id":"2","name":user2"}]
有两个问题:

我希望获得表中除id之外的所有数据,或者至少在用json编码之前将其切断。 由于某些原因,我无法在第一个用户之后显示技能。user2还应该有一个skills对象。
我做错了什么?

看起来你需要类似的东西:

while($r = mysqli_fetch_assoc($getSkills)) {
    unset($r['id']);
    $rows['skills'] = $r;
}
第1点:像Unset$r['id']这样的Unset id要从数组$r中删除。在取消设置id之前,请将id保留为变量,因为您将其用于下一个查询。 第2点:这些ID中可能没有数据。因此,你没有获得技能。建议您根据这些ID查询技能表中是否存在任何数据


要从表中获取除id以外的所有列,可以列出要选择的所有列,如下所示:

mysqli_query($db, "SELECT column1, column2, another_column FROM `skills` WHERE id = '" . $r['id'] . "'");
或者,您可以在json编码之前选择所有内容并使用unset删除id列:

$getSkills = mysqli_query($db, "SELECT * FROM skills WHERE id = '" . $r['id'] . "'");
while ($r = mysqli_fetch_assoc($getSkills))
{
    unset($r['id']);

    // whatever it is that you want to do.
}
除了最后一个用户之外,技能不会显示,因为您在while循环的每个迭代中都会重新分配它。以下是您可以做的事情:

require_once('db.php');

$getUsers = mysqli_query($db, 'SELECT * FROM users');
$rows = array();

while ($r = mysqli_fetch_assoc($getUsers))
{
    $skills = array();
    $tempRow = $r;
    $getSkills = mysqli_query($db, "SELECT * FROM skills WHERE id = '" . $r['id'] . "'");
    while ($r = mysqli_fetch_assoc($getSkills))
    {
        unset($r['id']);  // since you don't want the `id`.
        $skills[] = $r;
    }
    $tempRow['skills'] = $skills;
    $rows[] = $tempRow;
}


print(json_encode($rows));

希望有帮助:

谢谢,对于问题2,我确信id 2的技能表中有数据,因为我正在本地处理它,我可以看到它。因此添加错误报告以查看是否发生错误$getSkills=mysqli_query$db,从id='$id'或diemysqli_error$db;的skills中选择*;。另一个建议:可以尝试使用mysqli\u fetch\u数组代替mysqli\u fetch\u assoc1。未报告任何错误。2.只是在结果中添加了一组数字,没有显示其他技能;获取两个结果,但格式不正确。谢谢,但这不是我所期望的。结果:{skills:[{woodcutting:22,mining:33},{woodcutting:6,mining:10}],0:{id:1,name:user1},1:{id:2,name:user2}这是我的错误。更新了答案:差不多,但是skills数组应该在对象{}之前有一个标签skills{So{name:user,skills:{}}@devs Try$tempRow['skills']=$skills而不是数组_push$tempRow,$skills?警告:使用mysqli时,应该使用参数化查询并将用户数据添加到查询中。不要使用字符串插值来完成此操作,因为这样会创建严重的错误。
require_once('db.php');

$getUsers = mysqli_query($db, 'SELECT * FROM users');
$rows = array();

while ($r = mysqli_fetch_assoc($getUsers))
{
    $skills = array();
    $tempRow = $r;
    $getSkills = mysqli_query($db, "SELECT * FROM skills WHERE id = '" . $r['id'] . "'");
    while ($r = mysqli_fetch_assoc($getSkills))
    {
        unset($r['id']);  // since you don't want the `id`.
        $skills[] = $r;
    }
    $tempRow['skills'] = $skills;
    $rows[] = $tempRow;
}


print(json_encode($rows));