ti-enxame.com

Selecionando dados de várias tabelas JDatabase?

Estou tentando selecionar dados de vários tabelas Jdatabase e usar um instrução IF-ELSE com isso:

$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'; 
}

COMO DEVE FUNCIONAR?:

A consulta acima deve verificar se o nome de usuário do usuário conectado atual está presente em qualquer uma das quatro tabelas ('#__table1', '#__table2', '#__table3', '#__table4') e, portanto, deve seguir o IF-ELSE DECLARAÇÃO

Mas ...

Ele seleciona apenas registros da primeira tabela (#__table1) e ignora todas as outras tabelas!

Quero dizer, se o nome de usuário já estiver presente em (#__table2), (#__table3),(#__table4) e não na primeira tabela (#__table1), ele ainda salta para ELSE STATEMENT, o que significa que apenas verifica o nome de usuário na primeira tabela !?

Alguma sugestão de como fazê-lo selecionar registros das quatro tabelas?

4
saibbyweb

Para verificar um valor em várias tabelas que não possuem um relacionamento, você precisará fazer várias consultas, 1 para cada tabela ou, melhor ainda, uma consulta UNION. Agora, o Joomla possui os métodos de banco de dados UNION, mas eles funcionam apenas no Joomla 3.3 e posterior.

O conceito da consulta que você precisará para o seu caso deve ser semelhante a este:

$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)";

Certifique-se de usar os métodos Joomla para adicionar aspas à sua consulta. Em seguida, verifique se há resultado com o método loadResult ().

Para JOOMLA 3.3 e posterior (e possivelmente em breve para a versão mais recente do J2.5)
Agora, se você estiver no Joomla 3.3, poderá usar os métodos UNION como abaixo:

$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();

Espero que isto ajude.
* É possível que haja alguns erros de sintaxe/análise, como escrevi aqui. Deixe-me saber se você encontrar algum problema para que eu possa corrigir minha resposta.

5
FFrewin