it-swarm-tr.com

Birden fazla JDatabase tablosundan veri mi seçiyorsunuz?

Birden fazla Jdatabase tabloları veri seçmek ve bu bir IF-ELSE deyimi kullanmak çalışıyorum:

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

NASIL ÇALIŞMALIDIR?:

Yukarıdaki sorgu, şu anda oturum açmış olan kullanıcının kullanıcı adı öğesinin dört tablonun herhangi birinde bulunup bulunmadığını kontrol etmelidir ('#__table1', '#__table2', '#__table3', '#__table4') ve buna göre EL-DİĞER BEYANNAMESİ

Ama ...

Yalnızca ilk tablodaki kayıtları seçer (#__table1) ve diğer tüm tabloları yok sayar!

Yani, eğer kullanıcı adı(#__table2), (#__table3),(#__table4) ve ilk tabloda değil (#__table1), hala atlar ELSE STATEMENT, bu sadece ilk tabloda kullanıcı adı olup olmadığını kontrol eder !?

Bu dört tablodan da kayıtları nasıl seçeceğine dair bir tahmininiz var mı?

4
saibbyweb

İlişkisi olmayan birden çok tablodaki bir değeri kontrol etmek için, birden çok sorgu, her tablo için 1 veya daha iyi bir UNION sorgusu yapmanız gerekir. Şimdi, Joomla'nın UNION veritabanı yöntemleri var, ancak bunlar sadece Joomla 3.3 ve sonraki sürümlerinde çalışıyor.

Vakanız için ihtiyaç duyacağınız sorgu kavramı aşağıdakine benzer olmalıdır:

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

Sorgunuza tırnak eklemek için Joomla yöntemlerini kullandığınızdan emin olun. Sonra loadResult () yönteminde sonuç olup olmadığını kontrol edin.

JOOMLA 3.3 ve üstü için (ve muhtemelen en son J2.5 sürümü için)
Şimdi, Joomla 3.3 üzerindeyseniz, aşağıdaki gibi UNION yöntemlerini kullanabilirsiniz:

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

Bu yardımcı olur umarım.
* Bunu burada yazdığım gibi bazı sözdizimi/ayrıştırma hataları olabilir. Cevabımı düzeltebilmem için böyle bir sorunla karşılaşırsanız bana bildirin.

5
FFrewin