web-dev-qa-db-ja.com

複数のJDatabaseテーブルからデータを選択しますか?

複数のJdatabaseテーブルからデータを選択し、IF-ELSEステートメントを使用してこれを試みています:

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

どのように動作する必要がありますか?

上記のクエリは、現在ログインしているユーザーのsernameが4つのテーブル('#__table1', '#__table2', '#__table3', '#__table4')のいずれかに存在するかどうかをチェックし、それに応じてIF-ELSE STATEMENTに従う必要があります=

しかし...

最初のテーブル(#__table1)からレコードを選択するだけで、他のすべてのテーブルを無視します!

つまり、sername(#__table2), (#__table3),(#__table4)にすでに存在し、最初のテーブル(#__table1)に存在しない場合でも、ELSE STATEMENTにジャンプします。これは、最初のテーブルでsernameのみをチェックします!?

4つのテーブルすべてからレコードを選択する方法についての推測はありますか?

4
saibbyweb

リレーションシップを持たない複数のテーブルの値をチェックするには、テーブルごとに1つずつ、複数のクエリを作成するか、UNIONクエリを作成する必要があります。現在、JoomlaにはUNIONデータベースメソッドがありますが、これらはJoomla 3.3以降でのみ機能します。

ケースに必要なクエリの概念は次のようになります。

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

Joomlaメソッドを使用してクエリに引用符を追加することを確認してください。次に、loadResult()メソッドで結果があるかどうかを確認します。

JOOMLA 3.3以降の場合(およびおそらく最新のJ2.5バージョンでは間もなく)
これで、Joomla 3.3を使用している場合は、以下のようなUNIONメソッドを使用できます。

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

お役に立てれば。
*これをここで書いたように、構文/解析エラーが発生する可能性があります。このような問題が発生した場合はお知らせください。正解します。

5
FFrewin