php - 使用良好的 SQL 查询而不是 PHP 代码

标签 php mysql sql mysqli

我有一个页面需要很长时间才能加载,我几乎可以肯定这是由太多的 sql 请求引起的(又名是由我糟糕的 SQL 技能引起的)。有没有办法将这 3 个查询合并为一个?

我想要对这个查询做的是尝试从cardapios中选择一个特定的id,如果那里有任何东西(如果$num_rows> 0)我唯一想做的就是选择该id。如果那里什么都没有,那么我想插入一些东西,然后选择它的 id。

    $query = "SELECT id FROM cardapios WHERE nome='$nome'";
    $sql = mysqli_query($con,$query);
    $num_rows = mysqli_num_rows($sql);
    if ($num_rows > 0){
            while ($row = mysqli_fetch_array($sql)){
                $_SESSION['id_cardapio'] = $row['id'];
      $num_rows = 0;
    }}else{
            $query = "INSERT INTO cardapios (nome, kcal, semana)
            VALUES('$nome', '$kcal', '$semana')" or die(mysqli_error($con));
            $sql = mysqli_query($con,$query);

            $query = "SELECT id FROM cardapios WHERE nome='$nome' ";
            $sql = mysqli_query($con, $query);
            while ($row = mysqli_fetch_array($sql)){
                $_SESSION['id_cardapio'] = $row['id'];
            }
      }

我试图将所有这些放入一个查询中,但一无所获。无论如何,有没有只使用一个查询来完成所有这些操作?

提前致谢!

最佳答案

您可以通过获取 mysqli_insert_id($con); 来替换最后一个查询,因为插入后您已经有了可用的插入 ID

$query = "SELECT id FROM cardapios WHERE nome='$nome'";
$sql = mysqli_query($con,$query);
$num_rows = mysqli_num_rows($sql);
if ($num_rows > 0){
    while ($row = mysqli_fetch_array($sql)){
        $_SESSION['id_cardapio'] = $row['id'];
        $num_rows = 0;
    }
}else{
    $query = "INSERT INTO cardapios (nome, kcal, semana)
        VALUES('$nome', '$kcal', '$semana')" or die(mysqli_error($con));
        $sql = mysqli_query($con,$query);

        if ( $sql !== false) {    // did insert work
            $_SESSION['id_cardapio'] = mysqli_insert_id($con);
        } else {
            // insert did nto work??
        }
}

关于php - 使用良好的 SQL 查询而不是 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923250/

相关文章:

php - 为什么我们在 PHP 中使用 assert() 和 assert_options()?

php - AJAX - PHP 通信模式

php - 包含地点,父地点,纬度,经度等的免费数据库

php - 日期比较查询php sql

PHP 从另一个表中获取信息

php - mysql 的 jQuery 模式用户删除选项

php - SQL表-数据管理

php - 从 mysql_* 转换为 mysqli 抛出 "Can' t 连接到 'host_name' 上的 MySQL 服务器“

mysql - 通过更新更改 MySQL 日期格式

sql - 为什么我不能动态更改数据库 SQL Server 2008