it-swarm-vi.com

Chọn dữ liệu từ nhiều bảng JDatabase?

Tôi đang cố gắng chọn dữ liệu từ nhiều bảng Jdatabase và sử dụng một câu lệnh IF-ELSE với điều này:

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

LÀM THẾ NÀO NÊN LÀM VIỆC?:

Truy vấn trên phải kiểm tra xem tên người dùng của người dùng đã đăng nhập hiện tại có trong bất kỳ bốn bảng nào ('#__table1', '#__table2', '#__table3', '#__table4') Và theo đó phải tuân theo TUYÊN BỐ IF-ELSE

Nhưng ...

Nó chỉ chọn các bản ghi từ bảng đầu tiên (#__table1) Và nó bỏ qua tất cả các bảng khác!

Ý tôi là, nếu tên người dùng đã có trong (#__table2), (#__table3),(#__table4) Và không có trong bảng đầu tiên (#__table1), Nó vẫn nhảy đến TÌNH TRẠNG ELSE mà có nghĩa là nó chỉ kiểm tra tên người dùng trong bảng đầu tiên!?

Bạn có đoán được làm thế nào để làm cho nó chọn các bản ghi từ tất cả bốn bảng không?

4
saibbyweb

Để kiểm tra giá trị trong nhiều bảng không có mối quan hệ bạn sẽ cần thực hiện nhiều truy vấn, 1 cho mỗi bảng hoặc tốt hơn là tạo truy vấn UNION. Bây giờ, Joomla có các phương thức cơ sở dữ liệu UNION, nhưng các phương thức này chỉ hoạt động trên Joomla 3.3 trở lên.

Khái niệm truy vấn bạn sẽ cần cho trường hợp của bạn phải tương tự như sau:

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

Hãy chắc chắn rằng bạn sẽ sử dụng các phương thức Joomla để thêm dấu ngoặc kép vào truy vấn của bạn. Sau đó kiểm tra xem có kết quả với Phương thức loadResult () không.

Dành cho JOOMLA 3.3 trở lên (và có thể sớm có phiên bản J2.5 mới nhất)
[.__.] Bây giờ, nếu bạn đang dùng Joomla 3.3, bạn có thể sử dụng các phương thức UNION như dưới đây:

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

Hi vọng điêu nay co ich.
[.___.] * Có thể có một số lỗi cú pháp/phân tích cú pháp, như tôi đã viết ở đây. Hãy cho tôi biết nếu bạn gặp phải bất kỳ vấn đề như vậy để tôi có thể sửa câu trả lời của mình.

5
FFrewin