it-swarm.dev

Selezione di dati da più tabelle JDatabase?

Sto cercando di selezionare dati da più tabelle Jdatabase e usare un istruzione IF-ELSE con questo:

$db = JFactory::getDbo();
$user = JFactory::getUser();

$query = $db->getQuery(true);
$query->select($db->quoteName('username'))
      ->from($db->quoteName('#__table1', '#__table2', '#__table3', '#__table4'))
      ->where($db->quoteName('username') . ' = '. $db->quote($user->username));

$db->setQuery($query);
$result = $db->loadResult();

if($result) {
echo 'hey you are already there'; 
}
else {
echo 'sorry boss, you are out'; 
}

COME DOVREBBE FUNZIONARE?:

La query sopra dovrebbe verificare se nome utente dell'utente attualmente connesso è presente in una delle quattro tabelle ('#__table1', '#__table2', '#__table3', '#__table4') e di conseguenza dovrebbe seguire IF-ELSE STATEMENT

Ma ...

Seleziona solo i record dalla prima tabella (#__table1) e ignora tutte le altre tabelle!

Voglio dire, se nome utente è già presente in (#__table2), (#__table3),(#__table4) e non nella prima tabella (#__table1), passa comunque a ELSE STATEMENT il che significa che controlla solo nome utente nella prima tabella !?

Qualche ipotesi su come farlo selezionare i record da tutte e quattro le tabelle?

4
saibbyweb

Per verificare la presenza di un valore in più tabelle che non hanno una relazione, è necessario eseguire più query, 1 per ogni tabella o meglio eseguire una query UNION. Ora, Joomla ha i metodi di database UNION, ma quelli funzionano solo su Joomla 3.3 e versioni successive.

Il concetto della query di cui hai bisogno per il tuo caso dovrebbe essere simile a questo:

$query = "SELECT `username`
FROM `#__table1`
WHERE `username` = $user->username
UNION (
SELECT `username`
FROM `#__table2`
WHERE `username` = $user->username)
UNION (
SELECT `username`
FROM `#__table3`
WHERE `username` = $user->username)";

Assicurati di utilizzare i metodi Joomla per aggiungere virgolette alla tua query. Quindi controlla se ci sono risultati con il metodo loadResult ().

Per JOOMLA 3.3 e versioni successive (e probabilmente presto per l'ultima versione J2.5)
Ora, se usi Joomla 3.3, puoi usare i metodi UNION come di seguito:

$query = $db->getQuery(true);
$query2 = $db->getQuery(true);
$query3 = $db->getQuery(true);
$query4 = $db->getQuery(true);

$query->select($db->quoteName('username'))
      ->from($db->quoteName('#__table1'))
      ->where($db->quoteName('username') . ' = '. $db->quote($user->username));

$query2->select($db->quoteName('username'))
       ->from($db->quoteName('#__table2'))
       ->where($db->quoteName('username') . ' = '. $db->quote($user->username));

$query3->select($db->quoteName('username'))
       ->from($db->quoteName('#__table3'))
       ->where($db->quoteName('username') . ' = '. $db->quote($user->username));

$query4->select($db->quoteName('username'))
       ->from($db->quoteName('#__table4'))
       ->where($db->quoteName('username') . ' = '. $db->quote($user->username));

$query->union($query2)->union($query3)->union($query4); // Union method allows you to chain the union queries!!

$db->setQuery($query);
$result = $db->loadResult();

Spero che sia di aiuto.
* È possibile che ci siano degli errori di sintassi/analisi, come ho scritto qui. Fammi sapere se riscontri tali problemi in modo da poter correggere la mia risposta.

5
FFrewin