Back to top

Autore Topic: [RISOLTO] Query con data variabile  (Letto 4751 volte)

Offline laupic

  • Nuovo arrivato
  • *
  • Post: 5
  • Sesso: Maschio
    • Mostra profilo
[RISOLTO] Query con data variabile
« il: 29 Mag 2014, 23:44:01 »
Un saluto a tutti voi del forum, vi seguo da circa un anno e grazie agli innumerevoli consigli sono riuscito a pubblicare un piccolo sito per una società sportiva calcistica per ragazzi.
Detto questo passiamo al problema che mi ha spinto a cercare ufficialmente il vostro aiuto.  ;D
Sto cercando di estrarre giornalmente da delle tabelle l'elenco dei ragazzi che compiono gli anni.
LA query creata e testata direttamente in Phpmyadmin è la seguente:


SELECT  prefix_tab_uno.first_name, prefix_tab_uno.last_name,  prefix_tab_due.t_name, prefix_tab_tre.fvalue
FROM prefix_tab_uno
INNER JOIN prefix_tab_tre
ON prefix_tab_uno.id = prefix_tab_tre.uid
INNER JOIN prefix_tab_due
ON prefix_tab_uno.team_id = prefix_tab_due.id
WHERE LEFT (prefix_tab_tre.fvalue, 5) = DATE_FORMAT(NOW(), '%d/%m')


questa funziona perfettamente ma ora devo "tradurla" in formato, da quello che ho letto, "standard Joomla".
Dopo varie indagini e prove sono giunto a questo risultato:


Codice: [Seleziona]
<?php

$db 
JFactory::getDBO();
$query $db->getQuery(true);
$query->select($db->quoteName(array('u.first_name''u.last_name''d.t_name''t.fvalue')));
$query->from($db->quoteName('#__tab_uno''u'));
$query->join('INNER'$db->quoteName('#__tab_tre''t') . ' ON (' $db->quoteName('t.uid') . ' = ' $db->quoteName('u.id') . ')');
$query->join('INNER'$db->quoteName('#__tab_due''d') . ' ON (' $db->quoteName('d.id') . ' = ' $db->quoteName('u.team_id') . ')');
$query->where($db->quoteName('t.fvalue') . ' LIKE \''.$db->escape('14/12').'%\'');   <-- DA SISTEMARE
$db
->setQuery($query);
$results $db->loadObjectList();
print_r($results);
?>


La Query così com'è estrae chi ha la data di nascita che inizia con '14/12', e funziona, però vorrei che questa data sia, naturalmente, legata al giorno di esecuzione della stessa.

Ora come posso tradurre la riga con la freccia, la WHERE CONDITION, inserendo al posto del valore fisso di prova '14/12' con una variabile PHP, o altro, del tipo: date('d/m')?


Io le ho provate tutte ma ora getto la spugna ...  :(


Di nuovo un saluto a tutti e un grazie a chi vorrà aiutarmi 
« Ultima modifica: 30 Mag 2014, 22:51:14 da laupic »

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Query con data variabile
« Risposta #1 il: 30 Mag 2014, 09:55:13 »
joomla usa le stesse identiche query di phpmyadmin e di qualunque motore mysql. L'unica differenza è che offre la possibilità (nb. è una possibilità, non l'unica via ovvero uno standard) di rendere più leggibile la query con l'ausilio dei metodi della classe getDBO, ovvero di utilizzare un'unico linguaggio per qualunque tipo di database (penserà il driver poi a tradurlo nel linguaggio esatto).
Tu puoi comunque tranquillamente usare la funzione setQuery inserendoci dentro la stringa sql in questo modo (es: )
Codice: [Seleziona]
$db->setQuery("UPDATE #__componente SET qualcosa = 1, orario = NOW() WHERE id = ".$var);
$result = $db->query();
Ovviamente la funzione di esecuzione della query varia in base all'operazione che stai effettuando (inserimento, aggiornamento, interrogazione, eliminazione, ecc..)

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Query con data variabile
« Risposta #2 il: 30 Mag 2014, 13:36:03 »

ciao,immagino che t.fvalue sia la data di nascita e voglio sperare che sia un campo di tipo data (date, datetime, timestamp), in tal caso la condizione diventa


Codice: [Seleziona]
where ( day(t.fvalue)=day(now()) and month(t.fvalue)=month(now()) )

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Query con data variabile
« Risposta #3 il: 30 Mag 2014, 13:52:36 »
opps dimenticavo  :(


ciao laupic, benvenuto sul forum  :)



mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline laupic

  • Nuovo arrivato
  • *
  • Post: 5
  • Sesso: Maschio
    • Mostra profilo
Re:Query con data variabile
« Risposta #4 il: 30 Mag 2014, 14:20:12 »
Grazie a tutti per l'interessamento e le "dritte".  ;)
Stasera a casa verificherò la tipologia del campo "t.fvalue" che, in teoria, è un campo data e proverò per poi mettere in pratica i vostri preziosi consigli.


Nel frattempo ne approfitto per chiedervi se esiste un qualcosa che permetta di effettuare una TRACE (o DEBUG) per valutare quello che faccio, e magari correggere gli errori in autonomia.
.....oppure FIREBUG consente già tutto questo?


grazie ancora



Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Query con data variabile
« Risposta #5 il: 30 Mag 2014, 14:39:06 »
per poter fare un debug serio, devi, come con ogni ambiente di sviluppo, installare una estensione lato server: io uso xdebug che ben si integra con i vari ide per php.


comunque il punto dolente è che la estensione la devi installare lato server, quindi non puoi farlo se il server non è tuo. il tal caso non ti resta che lavorare in locale (virtual machine o 'giocattolino' tipo [m|x|cz]amp che sia  ;D ;D )
ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline laupic

  • Nuovo arrivato
  • *
  • Post: 5
  • Sesso: Maschio
    • Mostra profilo
Re:Query con data variabile
« Risposta #6 il: 30 Mag 2014, 14:44:18 »
Quello lo immaginavo infatti il sito a scopo sviluppo è su un pc in locale ....
Intanto grazie e sicuramente vi informerò su come va ..  ::)

Offline laupic

  • Nuovo arrivato
  • *
  • Post: 5
  • Sesso: Maschio
    • Mostra profilo
Re:Query con data variabile
« Risposta #7 il: 30 Mag 2014, 22:47:47 »
ciao,immagino che t.fvalue sia la data di nascita e voglio sperare che sia un campo di tipo data (date, datetime, timestamp), in tal caso la condizione diventa

... questa è la cosa che mi ha dato da pensare ... ed infatti il campo è di tipo VARCHAR!!!
comunque sia adesso dopo i vostri preziosi suggerimenti sono riuscito a portarla a termine la cosa e funziona tutto.
Questo il codice:

Codice: [Seleziona]
<?php
// FUNZIONA !!!!!!!!!!!!!!!!!!!!
$db JFactory::getDBO();
$query $db->getQuery(true);
$query->select($db->quoteName(array('u.first_name''u.last_name''d.t_name''t.fvalue')));
$query->from($db->quoteName('#__bl_players''u'));
$query->join('INNER'$db->quoteName('#__bl_extra_values''t') . ' ON (' $db->quoteName('t.uid') . ' = ' $db->quoteName('u.id') . ')');
$query->join('INNER'$db->quoteName('#__bl_teams''d') . ' ON (' $db->quoteName('d.id') . ' = ' $db->quoteName('u.team_id') . ')');
// cerca la stringa che comincia con la data indicata
$query->where("t.fvalue LIKE '".date("d")."/".date("m")."%'");
$db->setQuery($query);
$results $db->loadObjectList();
print_r($results);
?>


Come d'abitudine nel vostro forum inserisco il [RISOLTO] ma se qualcuno di voi "guru" ha qualche appunto o suggerimento su come è fatta la QUERY io sono qui per apprendere.
 
Grazie ancora per i suggerimenti e prossimo passo .... elaborare il risultato della QUERY ... ma questo dovrebbe essere un pò più facile ... SPEREM

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:[RISOLTO] Query con data variabile
« Risposta #8 il: 31 Mag 2014, 08:21:57 »
io ti consiglierei di modificare la struttura del db e far diventare quel campo di tipo data.
tutte le volte che sono dovuto intervenire su db in cui le date erano char o int usati come stringhe (es: 20140321), opera tipicamente dei programmatori 'basic' (sui quali la penso esattamente come Dijkstra), mi sono trovato compleanni al 30/2 e contratti in scadenza al 31/4...

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif