it-swarm-id.com

Memilih data dari beberapa tabel JDatabase?

Saya mencoba untuk memilih data dari banyak tabel Jdatabase dan menggunakan pernyataan IF-ELSE dengan ini:

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

BAGAIMANA HARUS BEKERJA?:

Kueri di atas harus memeriksa apakah nama pengguna dari pengguna yang masuk saat ini ada di salah satu dari empat tabel ('#__table1', '#__table2', '#__table3', '#__table4') dan karenanya harus mengikuti Pernyataan IF-ELSE

Tapi ...

Itu hanya memilih catatan dari tabel pertama (#__table1) dan mengabaikan semua tabel lainnya!

Maksud saya, jika nama pengguna sudah ada dalam (#__table2), (#__table3),(#__table4) dan bukan di tabel pertama (#__table1), itu masih melompat ke PERNYATAAN LAIN yang berarti hanya memeriksa nama pengguna di tabel pertama !?

Adakah tebakan tentang bagaimana membuatnya memilih catatan dari keempat tabel?

4
saibbyweb

Untuk memeriksa nilai dalam beberapa tabel yang tidak memiliki hubungan Anda perlu membuat beberapa kueri, 1 untuk setiap tabel, atau lebih baik membuat kueri UNION. Sekarang, Joomla memiliki metode basis data UNION, tetapi itu hanya berfungsi pada Joomla 3.3 dan yang lebih baru.

Konsep kueri yang akan Anda butuhkan untuk kasus Anda harus serupa dengan ini:

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

Pastikan Anda akan menggunakan metode Joomla untuk menambahkan kutipan ke permintaan Anda. Kemudian periksa apakah ada hasil dengan metode loadResult ().

ntuk JOOMLA 3.3 dan yang lebih baru (dan mungkin segera untuk versi J2.5 terbaru)
Sekarang, jika Anda menggunakan Joomla 3.3, Anda dapat menggunakan metode UNION seperti di bawah ini:

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

Semoga ini membantu.
* Mungkin saja ada kesalahan sintaks/parse, seperti yang saya tulis di sini. Beri tahu saya jika Anda mengalami masalah seperti itu sehingga saya dapat memperbaiki jawaban saya.

5
FFrewin