Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    La prenotazione dura due ore. Come implementare la QUERY

    Salve a tutti, sono nuovo e disperato.

    Sto implementando una prenotazione on-line per un ristorante, ogni volta che un cliente inserisce la data di prenotazione devo controllare se nel dataBase tale tavolo è stato prenotato per le due ore precedenti e le due ore sucessive.

    Il cliente è un oggetto che si chiama $Customer, ed ha un campo date ($Customer->date), nel database la tablella che devo considerare si chiama "custumers" e ha un campo "date" di tipo DATETIME.

    Ho provato con la funzione DATE_ADD ma ho fatto solo pasticci.

    Qualche idea?

    Vi ringrazio in anticipo...
    Marcello

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Si tratta solo di definire la clausola WHERE delle query, non è un argomento PHP.
    Ti sposto in Database.

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Come hai usato DATE_ADD ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    una query tipo questa potrebbe andare bene?
    codice:
    SELECT tavolo, dataora 
          FROM prenotazione 
          WHERE tavolo = id_tavolo_prenotato and dataora <= DATE_ADD('data e ora scelta dal cliente', INTERVAL 2 HOUR) 
          ORDER BY dataora DESC 
          LIMIT 1
    "id_tavolo_prenotato" arriverà dalla scelta del cliente così come "data e ora scelta dal cliente" (quest'ultima deve avere il formato AAAA-MM-DD HH:mm:ss, ad esempio 2014-11-08 09:00:00)

    se non ottieni un risultato, il tavolo è prenotabile, se invece ottieni dei record potrai dire al cliente quando si libera il tavolo (basta che aggiungi due ore al campo dataora che ti ha restituito la query)

  5. #5
    Ecco come ho usato la funzione e la query per intero:

    SELCT tables.id FROM tables, customers
    WHERE tables.nseats >= '$Customer->nseats' AND tables.id = customers.idtable AND customers.date <= DATA_ADD('$Customer->date',INTERVAL 2 HOUR)
    ORDER BY customers.date DESC
    LIMIT 1

    La prima clausola WHERE è per controllare se il numero di sedie del tavolo è abbastanza per il numero di sedie che servono al cliente, la seconda per vedere se il tavolo è prenotato (JOIN tra diverse tabelle), la terza per vedere a che ora il tavolo è prenotato.

    Ecco l'errore che ho quando eseguo:

    Query error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY customers.date DESC LIMIT 1' at line 1

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    È DATE_ADD non DATA_ADD poi puoi anche provare a togliere le apici.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    cavolo mi sento stupido

    A quali apici ti riferisci? La query è dentro a un codice PHP, per questo ci sono gli apici.

  8. #8
    Non funziona comunque, ho bisogno di un controllo più complicato, mi restituisce comunque il numero di un tavolo anche quando il tavolo è prenotato per quell'orario, anche se ora non ci sono errori di sintassi.

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Il numero di posti presumo sia un numero nel DB, quindi togli gli apici nel where
    Mi sta venendo il dubbio che non ci vogliano anche per la data e ora

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova cosi :

    customers.date between $Customer->date and DATE_ADD('$Customer->date',INTERVAL 2 HOUR)
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

Tag per questa discussione

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.