Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    interrogazione mysql per trovare date ottimali

    Ciao a tutti, vi scrivo per chiedere un aiuto. Cercherò di essere il più chiaro possibile.

    Devo completare un gestionale online che serve a degli utenti che partono per un viaggio a prenotare delle carte sim da usare durante il viaggio. Questo script ne prevede la gestione.
    E' così strutturato, ho 2 tabelle (scrivo solo i campi utili)

    Una è la tabella delle sim card che è così composta:

    ID (id univoco della scheda es. 65)
    NUMERO: 3334545465 (numero telefonico associato es. 3335467487)

    L'altra tabella è quella delle prenotazioni effettive delle sim ed è così composta

    ID (Id univoco della prenotazione es. 3)
    NUMERO_SIM (Id della simcard prenotata es. 65)
    leave_time (tempo unix dell'inizio della prenotazione es. 1331593200)
    back_time (tempo unix della fine della prenotazione es. 1332284400)

    Questa è in linea di massima la struttura del db

    In questo momento il valore NUMERO_SIM è inserito a mano da un amministratore in base all'otimizzazione degli spazi


    Quello che devo fare è piuttosto complicato (almeno per me) ovvero rendere l'associazione sim--> prenotazione ottimizzata in automatico:

    Diciamo che un utente prenota dal 6-6-2011 al 15-6-2011

    Lo script dovrebbe assegnare a questa prenotazione la sim card più "adatta" ovvero quella che lascia meno giorni di inutilizzo delle sim, ottimizzando così lo spazio per le prenotazioni.

    Il mio non è un problema di linguaggio di programmazione, ma proprio di logica, non capisco come si può fare. Qualcuno può aiutarmi per favore?

    Se non sono stato chiaro ditemelo.

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    prendiamo per esempio quello da te riportato

    utente vuole prenotare una sim dal 6-6-2011 al 15-6-2011

    selezioni tutte le prenotazioni delle sim

    $sim
    $inizio = 6-6-2011
    $fine = 15-6-2011
    $differenza

    ciclo sulle prenotazioni
    recuperi il back_time e controlli che < $inizio
    $diftemp = fai la differenza tra back_time e $inizio
    se $diftemp < $differenza allora
    selezioni tutte le prenotazioni associate alla sim in canna aventi date "leave_time" >= $inizio
    e "back_time" <= $fine OPPURE "leave_time" <= $inizio e "back_time" >= $fine
    se trovi almeno un rk vuoll dire che quella sim non è prenotabile perche ha gia un'altra prenotazione.
    Altrimenti ti salvi il numero sim in $sim.....

    Continuando col ciclo while confronti tutte le differenze e vedi se c'è una sim migliore.

    alla fine del ciclo while ti trovi in $sim la tua sim migliore oppure se è NULL non puoi prenotare quel range di data.....
    Che mestiere difficile.....essere da soli ancora di più

  3. #3
    grazie fractals, cerco di vedere se riesco a capire e a tradurre in codice quello che hai scritto e poi eventualmente ti faccio sapere l'esito.
    Grazie

  4. #4
    Ok ci ho provato e riprovato, ma non riesco nemmeno a mettere insieme il codice, posso solo chiederti di spiegarmi il procedimento che useresti più nel dettaglio? Non ci arrivo proprio

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    $sim = "";
    $inizio = $_POST['inizio'];
    $fine = $_POST['fine'];
    $differenza = "";

    $sql="select * FROM prenotazioni";
    $res=mysql_query($sql);

    while($rk=mysql_fetch_array){
    if($rk['back_time']<$inizio){
    $diftemp = qui fai la differenza tra i giorni la sintassi non ricorso
    if($diftemp < $differenza){
    $sql="select count(*) as n FROM prenotazioni WHERE (leave_time >= $inizio
    AND "back_time" <= $fine) OR (leave_time <= $inizio AND back_time >= $fine )"; riguarda la sintassi sql
    $res2=mysql_query($sql);
    $rk2=mysql_fetch_array($res2);
    if($rk2[n]==0){
    $sim = $rk['sim'];
    $differenza = $diftemp
    }
    }
    }
    }
    recuperi il back_time e controlli che < $inizio
    $diftemp = fai la differenza tra back_time e $inizio
    se $diftemp < $differenza allora
    selezioni tutte le prenotazioni associate alla sim in canna aventi date "leave_time" >= $inizio
    e "back_time" <= $fine OPPURE "leave_time" <= $inizio e "back_time" >= $fine
    se trovi almeno un rk vuoll dire che quella sim non è prenotabile perche ha gia un'altra prenotazione.
    Altrimenti ti salvi il numero sim in $sim.....
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    grazie ci provo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.