Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/06/2012, 11:38
KimboKim
 
Fecha de Ingreso: abril-2011
Mensajes: 67
Antigüedad: 13 años, 11 meses
Puntos: 6
Problemas con consulta SQL

Hola a todos, tengo un pequeño problema

En mi DB tengo una tabla llamada tarifas, y dentro hay 5 campos que son
- id_tarifa
- coche
- fecha_inicio
- fecha_fin
- p_1
- p_2, p_3, p_4, p_5, p_6, p_7, p_14

quiero hacer un sistema que calcula el precio del alquiler de un coche para las fechas escogidas por el cliente. si el periodo está en una unica tarifa no hay problema el sistema funciona correctamente, el problema es cuando pertenece a diferentes tarifa, que tambien funciona pero me coge la tarifa equibocada. le paso el código para que le puedan echar un vistazo

Código:
<?php
//Funcion para calcular precio del alquiler de coches.
function calcular_precio($recogida,$entrega,$coche){
	//declara $total como variable global	
	global $total;	
	$SacarTarifa = mysql_query("SELECT * FROM tarifas where coche='$coche' AND inicio<='$recogida' AND fin>='$entrega'", conectar()) or die(mysql_error());
	//Si el periodo de la reserva está comprendido entre el inicio y el fin de la tarifa aplicada
	if(mysql_num_rows($SacarTarifa)>=1){		
		$dataTarifa = mysql_fetch_array($SacarTarifa);
		//contar dias de la reserva
		$dias = abs((strtotime($entrega) - strtotime($recogida))/86400);
		//Aplicar los precios de la tarifa segun los dias elegidos
		switch ($dias){
			case "1": $total=$dataTarifa['p_1']; break;
			case "2": $total=$dataTarifa['p_2']; break;
			case "3": $total=$dataTarifa['p_3']; break;
			case "4": $total=$dataTarifa['p_4']; break;
			case "5": $total=$dataTarifa['p_5']; break;
			case "6": $total=$dataTarifa['p_6']; break;							
			case "7": $total=$dataTarifa['p_7']; break;						
			case "14": $total=$dataTarifa['p_14']; break;	
		}
		//si los dias son 8,9,10,11,12,13
		if(($dias>7)&&($dias<14)){
			$total=($dataTarifa['p_7']/7)*$dias;
		}
		//Si los dias son más de 14 dias
		if($dias>14){
			$total=($dataTarifa['p_14']/14)*$dias;
		}
	}
	//Si el periodo de la reserva tiene diferentes tarifas, saco el precio desde la tarifa donde se encuentra $recogida.
	else{
		$SacarTarifaM = mysql_query("SELECT * FROM tarifas where coche='$coche' AND inicio <= '$recogida'", conectar()) or die(mysql_error());
		$dataTarifaM = mysql_fetch_array($SacarTarifaM);
		$diasM = abs((strtotime($entrega) - strtotime($recogida))/86400);
                //aplico los precios
		switch ($dias1){
			case "1": $total=$dataTarifaM['p_1']; break;
			case "2": $total=$dataTarifaM['p_2']; break;
			case "3": $total=$dataTarifaM['p_3']; break;
			case "4": $total=$dataTarifaM['p_4']; break;
			case "5": $total=$dataTarifaM['p_5']; break;
			case "6": $total=$dataTarifaM['p_6']; break;							
			case "7": $total=$dataTarifaM['p_7']; break;						
			case "14": $total=$dataTarifaM['p_14']; break;	
		}
		if(($diasM>7)&&($diasM<14)){
			$total=($dataTarifaM['p_7']/7)*$diasM;
		}if($diasM>14){
			$total=($dataTarifaM['p_14']/14)*$diasM;
		}
	}
	//Devolver el total de la reserva
	return $total;
}
?>
cuando ejecuto el script con un periodo de varias tarifas siempre me saca la del primer campo de la tabla, aunque la tarifa correcta sea la última.

alguna recomendacion o sugerencia??