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

    Order By con aggiunta di maggiore o minore

    Ciao a tutti,
    parliamo di news con una scadenza. al raggiungimento della scandenza, la news interessata dovrebbe spostarsi in ultima posizione.

    tra le mie elucubrazioni avrei pensato qualcosa del genere
    Codice PHP:
    $rs mysql_query("SELECT * FROM news ORDER BY validita > '".$oggi."' LIMIT $first$x_pag"); 
    come potrei risolvere in maniera "normale"?

    grazie.
    ---------------------------
    danielix05

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non è affatto chiaro. Se la query cerca i record con scadenza maggiore alla data odierna, quelli scaduti non figurano.

  3. #3

    immagino che...

    ciao nicola75ss,
    so che ciò che è scritto è sbagliato. era un esempio per far capire cosa vorrei ottenere.
    ...capisco di aver sbagliato esempio


    qualche proposta?
    ---------------------------
    danielix05

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Avessi la minima idea di cosa vuoi ottenere proverei ad aiutarti.
    Fai un esempio pratico.

  5. #5

    vai con la pratica :-)

    esempio su tre notizie
    oggi 16 aprile, tutte le notizie appaiono una dopo l'altra in ordine di data

    1 notizia bomba
    scadenza 16 aprile 2009

    2 notizia scoppiettante
    scadenza 17 aprile 2009

    3 notizia esilarante
    scadenza 18 aprile 2009

    domani, 17 aprile dovrei avere questa visualizzazione

    2 notizia scoppiettante
    scadenza 17 aprile 2009

    3 notizia esilarante
    scadenza 18 aprile 2009

    1 notizia bomba
    scadenza 16 aprile 2009

    sono stato più chiaro?
    vorrei evitare di fare due interrogazioni al db una per le notizie >= oggi
    un'altra per le notizie < oggi da mettere dopo la prima select...
    ---------------------------
    danielix05

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Ciao,
    inserisci un campo status alla tabella news.

    Oggi 16 aprile, fai un update della tabella news e setti a 1 lo stato della news.

    La query di selezione fai una cosa simile a questa:

    "SELECT * FROM news ORDER BY stato ASC, data DESC"

    Un saluto,
    Antonio

  7. #7
    Qualcosa del genere dovrebbe funzionare:

    codice:
    SELECT *, validita > NOW() AS test
    FROM news
    ORDER BY test DESC, validita DESC

  8. #8

    seguo k.b

    ho fatto questo
    Codice PHP:
    $rs mysql_query("SELECT *, validita >= '".$data."' AS newsonline FROM news ORDER BY newsonline DESC, validita ASC LIMIT $first$x_pag"); 
    non ne afferro la logica ma sembra che vada bene... domani controllo se le notizie seguono ciò che pensavo.

    per il momento grazie... domani ci aggiorniamo!
    ---------------------------
    danielix05

  9. #9

    aggiornamento

    ciao a tutti,
    a me sembra che non funzioni correttamente.
    attualmente la stringa di sopra stampa tutti i record dal 17-4 fino all'ultimo ancora valido: 31-12-2009 e poi inizia a stampare i record dal 9-3-2009 al 16-4-2009.

    sarebbe corretto
    ma se io provo a scrivere
    Codice PHP:
    $rs mysql_query("SELECT *, validita >= '".$data."' AS newsonline FROM news ORDER BY newsonline DESC, validita [b]DESC[/b] LIMIT $first$x_pag"); 
    mi inizia a stampare i record dal 31-12-2009 al 9-3-2009 PRATICAMENTE TUTTI.

    ma scusate... la prima parte ["newsonline DESC"] non dovrebbe rimanere invariata (cioè non dovrebbe sempre stampare dal 17-4 al 31-12 e poi iniziare con la seconda parte che stamperebbe dal 16-4 al 9-3?)

    sono confuso

    ripeto a me servirebbe la query divisa in due parti
    I parte: stampa crescendo da oggi fino all'ultima news maggiore di oggi
    II parte: finita la I si iniziano a stampare le news vecchie partendo da ieri fino a ritroso fino alla più vecchia presente nel db
    ---------------------------
    danielix05

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova così

    codice:
    (select * from tabella
    where campo_data >= curdate()
    order by campo_data asc)
    union
    (select * from tabella
    where campo_data < curdate()
    order by campo_data desc
    limit 0,1000)
    Al posto di 1000 metti un numero sufficientemente grande da contenere tutte le notizie vecchie.

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.