我似乎经常遇到这个问题,通常是为了在运行另一个查询之前检查 $_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/