web-dev-qa-db-fra.com

Sélection des données de plusieurs tables JDatabase?

J'essaie de sélectionner des données parmi plusieurs tables de Jdatabase et d'utiliser un instruction IF-ELSE avec ceci:

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

COMMENT CELA DEVRAIT FONCTIONNER?:

La requête ci-dessus doit vérifier si le nom d'utilisateur de l'utilisateur actuellement connecté est présent dans l'une des quatre tables ('#__table1', '#__table2', '#__table3', '#__table4') _ et doit en conséquence suivre le IF-ELSE STATEMENT

Mais ...

Il sélectionne uniquement les enregistrements de la première table (#__table1) et il ignore toutes les autres tables!

Je veux dire, si le nom d'utilisateur est déjà présent dans (#__table2), (#__table3),(#__table4) et non dans le premier tableau (#__table1) _, il passe toujours à ELSE STATEMENT ce qui signifie qu'il ne vérifie que le nom d'utilisateur dans le premier tableau!?

Des suppositions sur la façon de faire en sorte qu'il sélectionne des enregistrements dans les quatre tables?

4
saibbyweb

Pour rechercher une valeur dans plusieurs tables sans relation, vous devez créer plusieurs requêtes, une pour chaque table ou, mieux, créer une requête UNION. Joomla utilise maintenant les méthodes de base de données UNION, mais celles-ci ne fonctionnent que sur Joomla 3.3 et versions ultérieures.

Le concept de requête que vous allez avoir besoin pour votre cas devrait ressembler à ceci:

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

Assurez-vous d’utiliser les méthodes Joomla pour ajouter des guillemets à votre requête. Ensuite, vérifiez si la méthode loadResult () donne des résultats.

Pour JOOMLA 3.3 et ultérieur (et éventuellement bientôt pour la dernière version J2.5)
Maintenant, si vous utilisez Joomla 3.3, vous pouvez utiliser les méthodes UNION comme ci-dessous:

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

J'espère que cela t'aides.
* Il est possible qu'il y ait des erreurs de syntaxe/analyse, comme je l'ai écrit ici. Faites-moi savoir si vous rencontrez un tel problème afin que je puisse corriger ma réponse.

5
FFrewin