it-swarm-es.tech

¿Seleccionar datos de múltiples tablas JDatabase?

Estoy tratando de seleccionar datos de múltiples tablas Jdatabase y usar un instrucción IF-ELSE con esto:

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

¿CÓMO DEBE FUNCIONAR?:

La consulta anterior debe verificar si nombre de usuario del usuario conectado actualmente está presente en cualquiera de las cuatro tablas ('#__table1', '#__table2', '#__table3', '#__table4') y, en consecuencia, debe seguir el DECLARACIÓN DE SI NO

Pero ...

Solo selecciona registros de la primera tabla (#__table1) e ignora todas las demás tablas!

Quiero decir, si nombre de usuario ya está presente en (#__table2), (#__table3),(#__table4) y no en la primera tabla (#__table1), todavía salta a OTRA DECLARACIÓN lo que significa que solo verifica nombre de usuario en la primera tabla.

¿Alguna idea de cómo hacer que seleccione registros de las cuatro tablas?

4
saibbyweb

Para verificar un valor en varias tablas que no tienen una relación, necesitará realizar múltiples consultas, 1 para cada tabla, o mejor hacer una consulta UNION. Ahora, Joomla tiene los métodos de base de datos UNION, pero solo funcionan en Joomla 3.3 y versiones posteriores.

El concepto de la consulta que va a necesitar para su caso debería ser similar 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)";

Asegúrese de utilizar los métodos de Joomla para agregar citas a su consulta. Luego verifique si hay resultados con el método loadResult ().

Para JOOMLA 3.3 y posterior (y posiblemente pronto para la última versión J2.5)
Ahora, si estás en Joomla 3.3, puedes usar los métodos UNION como a continuación:

$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 esto ayude.
* Es posible que pueda haber algunos errores de sintaxis/análisis, como escribí esto aquí. Avíseme si encuentra algún problema para que pueda corregir mi respuesta.

5
FFrewin