- Home
- Categorie
- Coding e Sistemistica
- PHP
- select con where
-
select con where
ciao a tutti,
avrei bisogno di selezionare i record in questo modo:(cioè selezionare gli articoli Beauty degli ultimi 10 giorni + gli articoli Solari degli ultimi 10 giorni + gli articoli Soin degli ultimi 10 giorni)
articolo1 - sottocategoria Beauty - 03-09-2015
articolo2 - sottocategoria Beauty - 03-09-2015articolo7 - sottocategoria Solari - 01-09-2015
articolo12 - sottocategoria Solari - 01-09-2015
articolo15 - sottocategoria Solari - 25-08-2015articolo34 - sottocategoria Soin - 24-08-2015
articolo42 - sottocategoria Soin - 25-08-2015(invece quello che fa la mia query è quella di selezionare gli ultimi articoli in generale degli ultimi 10 giorni)
articolo1 - sottocategoria Beauty - 03-09-2015
articolo2 - sottocategoria Beauty - 03-09-2015articolo3 - sottocategoria Beauty - 03-09-2015
articolo4 - sottocategoria Beauty - 02-09-2015
articolo5 - sottocategoria Beauty - 02-09-2015articolo6 - sottocategoria Beauty - 01-09-2015
articolo7 - sottocategoria Solari - 01-09-2015come posso fare?
ThanksQuesta è la query:
$data_attuale = date("Y-m-d");
$ora_attuale = date("H:i:s");$query_articolo="SELECT c_art_sottocategoria., c_art_articolo.,
DATE_FORMAT(c_art_articolo.data_evento, '%d-%m-%Y') AS data_evento2FROM c_art_articolo
INNER JOIN c_art_sottocategoria
ON c_art_articolo.id_art_sottocategoria = c_art_sottocategoria.id_art_sottocategoriaWHERE c_art_articolo.id_art_categoria = '$idcategoria'
AND c_art_articolo.photogallery = 'no'
AND c_art_articolo.id_art_posizione_home != '1'
AND c_art_articolo.id_art_posizione_sottohome != '1'AND c_art_articolo.articolo_lingua_it = 'si'
AND ((c_art_articolo.data_evento < '$data_attuale')
OR (c_art_articolo.data_evento = '$data_attuale'
AND c_art_articolo.ora_pubblicazione <= '$ora_attuale'))AND c_art_articolo.data_evento > (NOW() - INTERVAL 10 DAY)
ORDER BY c_art_articolo.data_evento DESC";
-
puoi postare la struttura della tabella dalla quale vuoi estrarre i dati?
-
certo, grazie:
id_art_articolo
data_evento
ora_pubblicazione
articolo_lingua_it
id_art_categoria
id_art_sottocategoria
id_art_posizione_home
id_art_posizione_sottohome
photogallery
-
a primo impatto proverei:
$query_articolo="SELECT * from 'NOME_TABELLA' WHERE data_evento >= ( CURDATE() - INTERVAL 10 DAY ) AND (id_art_sottocategoria = 'beauty' OR id_art_sottocategoria = 'Solari' OR id_art_sottocategoria = 'Soin'";
-
grazie ma non è quello che vorrei fare io
-
tu hai solo fatto una una semplice selezione delle sottocategorie
-
Ciao,
non mi vengono soluzioni più performanti, quindi non posso far altro che suggerirti di fare un ciclo su un array contenente i nomi di tutte le categorie che vuoi ricercare ed eseguire una query con LIMIT 10 per ognuna di esse.In alternativa se usi una versione abbastanza aggiornata di MySql potresti fare un stored procedure che esegue tutto il ciclo. Sarebbe di sicuro più ottimizzato.
Se mi vengono in mente altre soluzioni ti faccio sapere.
-
Grazie Shad, pensavo che non ci fosse soluzione, per me andrebbe bene anche un array, basta che funziona.
In pratica come dovrei fare? Mi potresti fare un esempio perfavore?
-
Scriverti tutto il codice sarebbe troppo articolato per me. Ti dico i passi essenziali:
- prepari un array del tipo: array('Beauty', 'Solari', ecc.)
- Ci fai un ciclo foreach sopra
- per ognuno esegui la query usando LIMIT 10 per farti dare solo i primi 10 risultati
Poi dipende da quello che devi fare ma il succo è questo.
-
C'è qualcun altro che mi vuole dare altri consigli?
-
up
-
Ho risolto, senza array.
-
Ciao,
mi fa piacere che tu abbia risolto.Che ne dici di postare la tua soluzione qualora un domani potesse servire ad altri?
Saluti
-
Certo, ho messo una query nidificata dentro un'altra query.