php - 一起运行完全不相关的查询的最佳方式?

标签 php mysql mysqli

我似乎经常遇到这个问题,通常是为了在运行另一个查询之前检查 $_GET['id'] 是否确实存在于我的数据库中,是否与接收到的 id 相关。

如果存在具有相同 ID 的记录,则显示 HTML,例如:

if ($r) { #query was successful
    $num = mysqli_num_rows($r);
    if ($num == 1) {
        ?>

        <form method="post">
        ...
        <input type="submit" value="Submit" />
        </form>

        <?php
    } else {
        echo 'No records';
    }
} else {
    echo 'Query Failed';
}
mysqli_free_result($r);

上面的工作,但假设我想在我的开始/结束表单标签之间执行另一个不相关查询;简单地做这样的事情是否合适,我认为这是一个嵌套查询:

$q = "SELECT id FROM stuff WHERE id = $id";
$r = @mysqli_query($dbc, $q);
if ($r) { #query was successful
    $num = mysqli_num_rows($r);
    if ($num == 1) {
        ?>

        <form method="post">

        <?php
        $q = "SELECT example FROM somewhere";
        $r = @mysqli_query($dbc, $q);
        if ($r) {
            $num = mysqli_num_rows($r);
            if ($num > 0) {
                while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
                    echo $row['example'];
                }
            }
        } else {
            echo 'Query failed';
        }
        ?>

        <input type="submit" value="Submit" />
        </form>

        <?php
    } else {
        echo 'No records';
    }
} else {
    echo 'Query Failed';
}
mysqli_free_result($r);

或者创建一个 bool 值,像这样:

$id_status = 0;

$q = "SELECT id FROM stuff WHERE id = $id";
$r = @mysqli_query($dbc, $q);
if ($r) { #query was successful
    $num = mysqli_num_rows($r);
    if ($num == 1) {
        $id_status = 1;
    }
}
mysqli_free_result($r);

if ($id_status) { #Run another query
    ...
}

我目前遇到一个问题,需要为一项任务提供两个单独的查询结果:(1) 从另一个表生成输入,(2) 显示当前值,(3) 检查已生成的输入匹配当前值,例如:

$q = "SELECT id, food FROM restaurants";
$q = "SELECT favFood FROM people WHERE id = 1"; #favFood is equal to the id of food
...
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
    ?>
    #generate all food from table, make favFood the current selected input
    <input type="radio" name="yum" value="<?php echo $row['id']; ?>" />
    <?php
}

正如您所看到的,当涉及到不相关的查询时,我遇到了麻烦;最后一个例子可能会使用 UNION 或其他东西,但我有一堆重复的行显示 favFood,所以感觉不对,例如:

favFood | id | food
    1   |  1 | Pizza
    1   |  2 | Burgers
    1   |  3 | Monkey Brains

在结束之前,我只想说我已经尝试使用 mysqli_multi_query,但我很可能做错了什么;我什至不确定它在这种情况下是否有效,或者它到底做了什么。

谢谢!

最佳答案

如果您想在代码中多次检查一条记录是否存在,我建议创建一个返回 bool 值的函数。

function record_exists($dbc, $q){
    $state = false;
    if($r = @mysqli_query($dbc, $q)){
        if(mysqli_num_rows($r) == 1){
            $state = true;
        }
        mysqli_free_result($r);
    }
    return $state;
}

$q = "SELECT id FROM stuff WHERE id = $id";
if(record_exists($dbc, $q)){
    echo 'Yay, it exists';
}

然后,如果您想从一个表中SELECT某些字段,但过滤器取决于另一个表中的值,您可以在查询中JOIN两个表,如下所示:

SELECT restaurants.id, restaurants.food
FROM restaurants
JOIN people ON restaurants.id = people.favFood
WHERE people.id = 1

现在您只需从表 restaurants 中SELECT 所需的字段,然后根据表 people 中的人员 ID 过滤它们。

关于php - 一起运行完全不相关的查询的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825127/

相关文章:

php - 根据 URL 查询参数切换 Wordpress 帖子模板

php - MySQL使用另一个表中的值过滤一个表中的数据

mysql - 使用 MySql 存储过程减去顺序值

php - SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

php - 我可以在 PHP 中混合使用 MySQL API 吗?

PHPMailer 和 SMTP : Mail never shows up when sent from remote server, 在本地机器上工作正常

PHP接口(interface): specify a parameter list,但不是参数类型

mysql - 认识laravel的关系

php - mysql 与 mysqli。 mysqli 慢吗?

php - 使用bind_param、prepare语句和fetch从数据库获取结果不起作用