Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875

    consiglio su come migliorare il database e la query di ricerca

    Ciao a tutti
    sto facendo una nuova versione di un mio sito da dove vendo pacchetti vacanza.
    Fino ad ora la tabella offerte era composta dal campo "valida_da" e "valida_al" che significava che tale offerta era valida da un periodo all'altro, esempio dal 05 aprile al 2 maggio.

    la query di ricerca era un po' incasinata in quanto se una persona cercava un'offerta per maggio, nei risultati capitava anche questa in quanto erano compresi 2 giorni di maggio...

    Ora vorrei migliorare questa tabella e fare un motore di ricerca in home page dove l'utente sceglie il periodo (mese) e la categoria (stelle) e premendo invio dovrebbero uscire SOLO le offerte di quel mese fino al 31. (quindi anche l'offerta che va dal 31 al 7 del mese successivo).

    Gli altri parametri della tabella saranno:
    titolo, prezzo, numero di notti, supplementi e riduzioni, tipo di camera (superior, standard ecc)

    Per fare cio', come mi consigliate di creare la tabella? e la query?
    Oppure avete qualche altro consiglio stravolgendo questa mia idea?

  2. #2
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    nessuno sa consigliarmi qualcosa di migliore?

  3. #3
    scusa eh, ma se l'offeerta vale dal 20 Aprile al 13 Maggio, perchè se cerco le offerte di Maggio non dovrebbe apparire?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    volevo solo evitare che se un'offerta settimanale inizia ad esempio il 19 maggio e termina il 2 giugno (domenica), l'utente che mette giugno non dovrebbe visualizzarla in quanto non ha i 7 giorni di tempo ma solo 2, per questo dicevo che la query non e' correttissima e cercavo un consiglio su come strutturare le offerte, il problema ce l'ho solo quando un'offerta è a cavallo di 2 date

  5. #5
    Originariamente inviato da allin81
    volevo solo evitare che se un'offerta settimanale inizia ad esempio il 19 maggio e termina il 2 giugno (domenica), l'utente che mette giugno non dovrebbe visualizzarla in quanto non ha i 7 giorni di tempo ma solo 2, per questo dicevo che la query non e' correttissima e cercavo un consiglio su come strutturare le offerte, il problema ce l'ho solo quando un'offerta è a cavallo di 2 date
    mah... allora controlla che sia valida_da che valida_al siano dello stesso mese... e anno
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    ad essere dello stesso anno si, il problema e' il mese perche' capitano delle offerte che si accavallano in 2 mesi, e nella query volevo solo visualizzare quelli che hanno un periodo di tempo sufficiente a far visualizzare l'offerta.
    Ad esempio se il giorno 2 marzo, cerco le offerte di 7 notti per marzo e nel database ho un'offerta che va dal 3 al 10 marzo, questa offerta deve uscire a video.
    Se invece sempre il giorno 2 marzo, cerco un'offerta di 7 notti e nel database ho un'offerta che va dall'1 all'8, questa non deve uscire perche' essendo il 2 marzo mi restano solo 6 giorni e quindi quell'offerta non e' piu 'valida...
    Non so se mi sono spiegato bene

  7. #7
    Originariamente inviato da allin81
    ad essere dello stesso anno si, il problema e' il mese perche' capitano delle offerte che si accavallano in 2 mesi, e nella query volevo solo visualizzare quelli che hanno un periodo di tempo sufficiente a far visualizzare l'offerta.
    Ad esempio se il giorno 2 marzo, cerco le offerte di 7 notti per marzo e nel database ho un'offerta che va dal 3 al 10 marzo, questa offerta deve uscire a video.
    Se invece sempre il giorno 2 marzo, cerco un'offerta di 7 notti e nel database ho un'offerta che va dall'1 all'8, questa non deve uscire perche' essendo il 2 marzo mi restano solo 6 giorni e quindi quell'offerta non e' piu 'valida...
    Non so se mi sono spiegato bene
    ah ok, un pò più chiaro

    consideriamo quindi la seguente ricerca:

    "cerca offerta 7 notti nel mese di maggio"

    avrai $mese = 5 e $period = 8 ( 7 notti dovrebbero valere 8 giorni se non erro, al limite correggi te) e una query del tipo

    codice:
    where
    
    ( month(valida_da)=$mese and month(valida_al)=$mese and datediff(valida_al,valida_da)>=$period )
    or
    ( month(valida_da)=$mese and month((date_add(valida_dal,interval $period day)) = $mese )
    or
    ( month(valida_al)=$mese and month((date_sub(valida_al,interval $period day))=$mese)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    i campi sono errati:
    $mese è il mese che scelgo dal form di ricerca (1 per gennaio, 2 per febbraio, 3 per marzo, ecc)

    $durata è la durata che scelgo sempre dal form di ricerca (1 per tutte, 2 se scelgono da 1 a 5 notti, 3 se scelgono da 6 a 9 notti, 4 se scelgono un soggiorno superiore a 9 notti)

    $valida_da è il campo del database che indica quando inizia l'offerta

    $valida_fino è il campo del database che indica quando finisce l'offerta

    $prezzo_come è il campo del database che indica l'offerta per quante notti è (1 per 1 notte, 2 per 2 notti, 3 per 3 notti ecc)


    ho provato la tua query (modificandola secondo i miei campi) ma mi da errore, ecco come l'ho messa
    Codice PHP:
    $query_offerte="SELECT id_offerta, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino_ita, minimo_notti, prezzo, prezzo_come, trattamento, id_albergo, mezzo_di_trasporto FROM tbl_offerte WHERE 
    ( month(valida_da)=
    $mese and month(valida_fino)=$mese and datediff(valida_fino,valida_da)>=$prezzo_come )
    or
    ( month(valida_da)=
    $mese and month((date_add(valida_dal,interval $prezzo_come day)) = $mese )
    or
    ( month(valida_fino)=
    $mese and month((date_sub(valida_fino,interval $prezzo_come day))=$mese)"
    poi sotto continua facendo l'ordinamento

  9. #9
    ok intanto cambia da "valida_dal" a "valida_da" nel secondo or

    poi hai un secondo problema: non hai un "numero di notti finito" ma hai un range di numero di notti, quindi la query si complica un poco

    cmq fai la modifica e vedi se fuinziona, altrimenti dicci che errore ti da
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    si, l'avevo notato anche io quel valida_dal, l'ho modificato ma sempre errore ricevo:


    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 ') or ( month(valida_da)=2 and month((date_add(valida_da,interval day)) = 2 ) or' at line 2

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.