php - 使用 PHP 的 SQL MIN() 函数值,如何获取 MIN() 函数的值并使用它?
问题描述
因此,在以下代码中,当用户预订餐厅餐桌时应该检查可用性,我不知道如何获取结果:
$sql = "SELECT MIN(total_availability) FROM restaurant WHERE date='$date'";
$result = mysqli_query($link, $sql);
$sql_value = "";
/*
assign some value to $sql_value with the minimum value of the $sql statement
*/
if($sql_value > 0){
/*
insert row into restaurant table
*/
}
我该怎么办?谢谢。
可选的,不太相关,这是我收到一些评论后的原始源代码,我不使用PDO。
<?php
include "sessione.php";
include "connessione.php";
$name = mysqli_real_escape_string($connection, $_POST["name"]);
$surname = mysqli_real_escape_string($connection, $_POST["surname"]);
$people = $_POST["pax"];
$date = $_POST["date"];
$time = $_POST["time"];
$preference = $_POST["preference"];
$email = mysqli_real_escape_string($connection, $_POST["email"]);
if(preg_match("/^[a-zA-Z\s]*$/", $name) && preg_match("/^[a-zA-Z\s]*$/", $surname) && preg_match("/^[a-zA-Z0-9\.\-\_@]*$/", $email) && !empty($name) && !empty($surname) && !empty($people) && !empty($date) && !empty($time) && !empty($preference) && !empty($email)){
$sql = "SELECT * FROM il_leone_ristorante WHERE data='$date' AND disponibilita_totale <= 1";
$result = mysqli_query($connection, $sql);
$count = mysqli_num_rows($result);
if($count > 0){
mysqli_free_result($result);
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Disponibilità terminata.');
window.location.replace('ristorante.php');
</script>
";
} else {
$username = $_SESSION["username"];
$sql = "SELECT MIN(disponibilita_totale) FROM il_leone_ristorante WHERE data='$date'";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach ($row as $r){
$min_value = $r["MIN(disponibilita_totale)"];
}
$availability = $min_value;
if($availability > 0){
$availability -= 1;
} else {
$availability = NULL;
}
if($availability > 0 && $availability != NULL){
$sql = "INSERT INTO il_leone_ristorante (nome, cognome, persone, data, ora, preferenza, utente, disponibilita_totale) VALUES ('$name', '$surname', '$people', '$date', '$time', '$preference', '$username', '$availability')";
mysqli_query($connection, $sql);
$date = explode("-", $date); // for italian date format, data means date (day) in italian
$data = "".$date[2]."/".$date[1]."/".$date[0]."";
$subject = "Tavolo prenotato - conferma digitale";
$to = "$email";
$message = "
<html>
<head>
<title>Conferma</title>
</head>
<body>
<h1 style=\"color: blue; font-weight:bold;\">Conferma prenotazione del tavolo</h1><br />
<p>Nome: $name</p>
<p>Cognome: $surname</p>
<p>Persone: $people</p>
<p>Data: $data</p>
<p>Ora: $time</p>
<p>E-mail: $email</p>
</body>
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
mail($to, $subject, $message, $headers);
mysqli_free_result($result);
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Tavolo prenotato 1, controlla la tua mail per la conferma digitale.');
window.location.replace('index.php');
</script>
";
} else if($availability == NULL){
$sql = "SELECT * FROM il_leone_tavoli WHERE tipologia = 'disponibilita_totale'";
$result = mysqli_query($connection, $sql);
$row = mysqli_fetch_assoc($result);
$tables = $row["quantita"];
$tables -= 1;
$availability = $tables;
$sql_ = "INSERT INTO il_leone_ristorante (nome, cognome, persone, data, ora, preferenza, utente, disponibilita_totale) VALUES ('$name', '$surname', '$people', '$date', '$time', '$preference', '$username', '$availability')";
mysqli_query($connection, $sql_);
$date = explode("-", $date); // for italian date format, data means date (day) in italian
$data = "".$date[2]."/".$date[1]."/".$date[0]."";
$subject = "Tavolo prenotato - conferma digitale";
$to = "$email";
$message = "
<html>
<head>
<title>Conferma</title>
</head>
<body>
<h1 style=\"color: blue; font-weight:bold;\">Conferma prenotazione del tavolo</h1><br />
<p>Nome: $name</p>
<p>Cognome: $surname</p>
<p>Persone: $people</p>
<p>Data: $data</p>
<p>Ora: $time</p>
<p>E-mail: $email</p>
</body>
</html>
";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
mail($to, $subject, $message, $headers);
mysqli_free_result($result);
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Tavolo prenotato 2, controlla la tua mail per la conferma digitale.');
window.location.replace('index.php');
</script>
";
} else {
mysqli_free_result($result);
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Disponibilità terminata.');
window.location.replace('index.php');
</script>
";
}
}
} else {
mysqli_close($connection);
echo "
<script type=\"text/javascript\">
window.alert('Formato dati errato.');
window.location.replace('ristorante.php');
</script>
";
}
?>
我知道可能会更好,但我只是一个初学者,这是我正在为我正在制作的网络开发课程编程的网站,不幸的是,它都是意大利语https://corsowebgo.sbmsp.it/il_leone_pizzeria_ristorante_affittacamere/我我这样做只是为了练习。
解决方案
在 sql 语句中使用 SELECT 命令时,mysqli_query() 函数返回一个 mysqli_result_object,因此为了访问结果,我们使用 mysqli_fetch_all() 函数将其转换为数组。它获取所有结果行并将结果集作为关联数组、数字数组或两者返回。而在 INSERT 或 DELETE 命令中,mysqli_query() 返回布尔结果。
所以我修改了你的代码
$sql = "SELECT MIN(total_availability) FROM restaurant WHERE date='$date'";
$result = mysqli_query($link, $sql);
$result_array=mysqli_fetch_all($result,MYSQLI_ASSOC); /*MYSQLI_ASSOC is used to convert it into an associative array*/
foreach ($result_array as $r)
{
$min_value=$r['MIN(total_availability)'];
}
$sql_value =$min_value;
if($sql_value > 0)
{
/*
Insert row into restaurant table
*/
}
推荐阅读
- google-apps-script - 如何使用 Google Script 从多个子文件夹中同时搜索 Google Drive 文件夹中的特定文件名和文件类型
- amazon-web-services - Elastic Transcoder 修整时间 - 精度问题
- c - 在c中拆分字符串和计数标记
- c# - 无法从 .Net5 中的服务器读取 Response.Body
- docker - 访问 dockerfile 中的子文件夹
- flutter - 如何在颤动中获取用户的位置
- powerapps - Powerapps 模型驱动应用,在同一个视图中加入 2 个表
- c# - C#模拟单元测试GraphServiceClient
- matlab - MatLAB fsolve计算
- nlp - 特定文本提取