Php 以数组形式返回SQL查询
reserva\u disponibilidade返回相同的数组(29),何时应该返回…29,30,31。。。 有办法解决这个问题吗Php 以数组形式返回SQL查询,php,Php,reserva\u disponibilidade返回相同的数组(29),何时应该返回…29,30,31。。。 有办法解决这个问题吗 function estoque($data, $dias, $tipo) { //Ajusta a data... $inicio = strtotime($data); $edia = date('d', $inicio); $emes = date('m', $inicio);
function estoque($data, $dias, $tipo) {
//Ajusta a data...
$inicio = strtotime($data);
$edia = date('d', $inicio);
$emes = date('m', $inicio);
$eano = date('Y', $inicio);
//Conecta ao db...
$db = new DBConfig();
$db->config();
$db->conn();
//Arrays
$smarty_array = array();
$smarty_data_array = array();
$query_quartos = mysql_query("SELECT * FROM quartos AS quartos
INNER JOIN tipos AS tipos
LEFT JOIN reservas AS reservas
ON quartos.quarto_tipo = tipos.tipo_id
AND quartos.quarto_numero = reservas.reserva_quarto_id
WHERE quartos.quarto_tipo = '".$tipo."'
GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
while($row = mysql_fetch_assoc($query_quartos)){
$quartoid = $row["quarto_id"];
while($i <= $dias) {
$today = strtotime(date('Y-m-d',mktime(0,0,0,date($emes),date($edia)+$i,date($eano))));
$query = mysql_query("SELECT * FROM quartos AS quartos
LEFT JOIN reservas AS reservas
ON quartos.quarto_numero = reservas.reserva_quarto_id
AND ".$today." BETWEEN reservas.reserva_checkin AND reservas.reserva_checkout
WHERE quartos.quarto_id = '".$quartoid."'
GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
while($rowe = mysql_fetch_assoc($query)){
if (empty($rowe["reserva_status"])) {
$rowe["reserva_status"] = "0";
}
$smarty_data_array[] = $rowe["reserva_status"];
}
$i++;
}
$row["reserva_disponibilidade"] = $smarty_data_array;
$smarty_array[] = $row;
}
$db->close();
return $smarty_array;
}
这里的问题在于为$quartoid赋值的时间。如果只看这段代码:
while($row = mysql_fetch_assoc($query_quartos)){
$quartoid = $row["quarto_id"];
while($i <= $dias) {
$today = strtotime(date('Y-m-d',mktime(0,0,0,date($emes),date($edia)+$i,date($eano))));
$query = mysql_query("SELECT * FROM quartos AS quartos
LEFT JOIN reservas AS reservas
ON quartos.quarto_numero = reservas.reserva_quarto_id
AND ".$today." BETWEEN reservas.reserva_checkin AND reservas.reserva_checkout
WHERE quartos.quarto_id = '".$quartoid."'
GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
while($rowe = mysql_fetch_assoc($query)){
if (empty($rowe["reserva_status"])) {
$rowe["reserva_status"] = "0";
}
$smarty_data_array[] = $rowe["reserva_status"];
}
$i++;
}
while($row=mysql\u fetch\u assoc($query\u quartos)){
$quartoid=$row[“quarto_id”];
然而,太长了,读不下去了,不管怎样,这是什么:<代码> $RO[ [ RealvaDeSosiBidiIDe] ]=$smarty_data_array;
它们是否应该反转?这样,您就可以将$row键分配给整个smart_data_array。。如果我错了,我有点累了,有点困了。LOLI认为这是正确的,数据返回正确,但正在重复……我想说的一件事是,将SQL查询操作放入循环中?如果可以避免的话,这是个坏主意。同上用于时间戳生成逻辑。时间戳没有(或至少不应该)在循环过程中进行更改,因此您可以在进入循环之前只生成一次。至于SQL查询,使用IN而不是=意味着您可以匹配字段的值列表,而不是单个值。您可以使用循环来构建列表,然后运行单个查询来获取所有数据。这几乎肯定会快得多。我没有sucess之前只需要一个查询,但这是一个好主意。
while($row = mysql_fetch_assoc($query_quartos)){
$quartoid = $row["quarto_id"];
while($i <= $dias) {
$today = strtotime(date('Y-m-d',mktime(0,0,0,date($emes),date($edia)+$i,date($eano))));
$query = mysql_query("SELECT * FROM quartos AS quartos
LEFT JOIN reservas AS reservas
ON quartos.quarto_numero = reservas.reserva_quarto_id
AND ".$today." BETWEEN reservas.reserva_checkin AND reservas.reserva_checkout
WHERE quartos.quarto_id = '".$quartoid."'
GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
while($rowe = mysql_fetch_assoc($query)){
if (empty($rowe["reserva_status"])) {
$rowe["reserva_status"] = "0";
}
$smarty_data_array[] = $rowe["reserva_status"];
}
$i++;
}