Joomla.it Forum
Non solo Joomla... => Sviluppo => : ArroWeb 31 Dec 2016, 19:47:55
-
Salve avrei un problema sto creando un nuovo componente per joomla una specie di motore di ricerca ed ho riscontrato un problema effettuando una query al database spero che voi possiate aiutarmi.
Vi spiego ho creato 2 tabelle cosi:
TAB1
id | title | city |
1 | Casa | Milano |
2 | Casa | Roma |
TAB2
id | id_tab1 | title |
1 | 1 | Nuova |
2 | 1 | Vecchia |
3 | 1 | Bilocale |
4 | 2 | Villa |
5 | 2 | Villetta |
6 | 2 | Monolocale |
Con questa query:
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from($db->quoteName('#__tab1') . ' AS a');
$query->join('LEFT', $db->quoteName('#__tab2') . ' AS b ON (' . $db->quoteName('a.id') . ' = ' . $db->quoteName('b.id_tab1') . ')');
$db->setQuery($query);
$results = $db->loadObjectList();
?>
quando carico la pagina il risultato è il seguente:
1. casa - milano - nuova
2. casa - milano - vecchia
3. casa - milano - bilocale
4. casa - roma - villa
5. casa - roma - villetta
6. casa - roma - monolocale
io vorrei invece ricevere questo risultato:
1. casa - milano - ( nuova, vecchia, bifocale )
2. casa - roma - ( villa, villetta, monolocale )
Come posso fare?
-
Sarà l'effetto dello spumante, ma non ci ho capito niente ???
-
L' effetto dello spumante è passato ormai, quindi ... applichiamoci. ;)
Invece di usare una query con join potresti fare con 2 query. Meno elegante, convengo. Comunque con la prima query selezioni id_title di TAB1 e poi con una seconda query raggruppi le righe di TAB2 che hanno lo stesso id_title.
Verrebbe più bello riuscendo a fare una query con dentro una subquery, ma bisogna riguardarsi bene la sintassi mysql e poi renderla con le API database di joomla.
Oppure una singola tabella, più complessa di TAB1 + TAB2, ma anche per questa occorrono delle prove.
Buon 2017, Ciao!
-
;D era buono lo spumante? :P
Cmq ci avevo pensato pure io a fare due query, ma se poi i dati nel database aumentano ogni volta che faccio una ricerca, il serve riceve due chiamate e ci vuole più tempo prima che risponda, sarebbe preferibile tutto in una query.
-
Allora forse hai bisogno di usare la funzione GROUP_CONCAT
-
Allora forse hai bisogno di usare la funzione GROUP_CONCAT
Ci ho provato e mi restituisce un solo risultato
-
allora o lo usi male o ancora non ho capito la tua richiesta (evidentemente non era lo spumante il problema :P )
Guardati questo esempio: http://stackoverflow.com/questions/4455958/mysql-group-concat-with-left-join