it-swarm.com.de

Wie schreibe ich meine MySQL-Abfrage mit JOIN-Logik mit JDatabase-Methoden?

Es fällt mir schwer, dieses SQL-Skript in JDatabase-Methoden zu übersetzen, da ich die Abfragemethode AND nicht finden kann.

SELECT user.firstname, user.lastname, leadership.leadname, leadership.lead_des
FROM CLUB,LEADERSHIP,USER
WHERE CLUB.CLUB_ID=11
AND LEADERSHIP.USER_ID=USER.USER_ID
AND CLUB.CLUB_ID=Leadership.CLUB_ID;

Ich habe mir die JDatabase-Dokumentation angesehen , sehe dort aber nichts mit AND.

Wie kann ich meine Abfrage mit Joomlas Abfragesyntax schreiben?

3
Sosa
$db = JFactory::getDbo();
$query = $db->getQuery(true)
  ->select('user.firstname, user.lastname, leadership.leadname, leadership.lead_des')
  ->from('CLUB,LEADERSHIP,USER')
  ->where('CLUB.CLUB_ID=11')
  ->where('LEADERSHIP.USER_ID=USER.USER_ID')
  ->where('CLUB.CLUB_ID=Leadership.CLUB_ID');

Mehrere where-Klauseln werden standardmäßig mit AND verknüpft. Sie können den Kleber (AND oder OR) explizit als zweite Option für die obige where-Funktion angeben, dies ist jedoch optional. Zitat aus Joomla API-Dokumenten für JDatabaseQuery-> where-Funktion:

string $ glue - Der Klebstoff, mit dem die Bedingungen verbunden werden sollen. Der Standardwert ist AND. Beachten Sie, dass der Kleber bei der ersten Verwendung eingestellt wird und nicht geändert werden kann.

Alternativ können Sie auch eine einzelne where-Klausel manuell kombinieren. Mit dieser Methode können Sie OR und AND in den where-Klauseln einer komplexen Abfrage mischen.

$query = $db->getQuery(true)
  ->select('user.firstname, user.lastname, leadership.leadname, leadership.lead_des')
  ->from('CLUB,LEADERSHIP,USER')
  ->where('CLUB.CLUB_ID=11 AND LEADERSHIP.USER_ID=USER.USER_ID AND CLUB.CLUB_ID=Leadership.CLUB_ID');
6
Nagarjun

Sie können die and -Klausel folgendermaßen verwenden:

$query->where('CLUB.CLUB_ID = USER.USER_ID', 'AND')
      ->where('LEADERSHIP.USER_ID = USER.USER_ID', 'AND')
      ->where('CLUB.CLUB_ID = Leadership.CLUB_ID');
1
Lodder

Die Verwendung von Kommas als Mittel für JOIN -Tabellen ist eine ältere Stilsyntax. In jüngerer Zeit hat MySQL mehr Schlüsselwörter angeboten, um die Absicht des Beitritts besser zu beschreiben (Verbesserung der Lesbarkeit von Code).

Ihre Kommas stellen INNER JOIN Dar und Joomla hat eine festgelegte Abfragemethode für sie.

Im Folgenden werde ich einen try {} catch{} - Block empfehlen, der die Handhabung und das Debuggen Ihres Codes erleichtert. Keine Ihrer Tabellen, Spalten oder Werte erfordert ein Backtick oder einen einfachen Anführungszeichenumbruch, daher werde ich keine $db->qn() - oder $db->q() -Methode aufrufen. Wenn Ihre echte Abfrage Variablen enthält oder anderweitig diese Überlegungen erfordert, ist mein Snippet gut geeignet, um diese Änderungen zu erhalten.

$db = JFactory::getDbo();
try {
    $query = $db->getQuery(true)
                ->select(
                    array("a.firstname", "a.lastname", "b.leadname", "b.lead_des")
                  )
                ->from("club a")
                ->innerJoin("leadership b ON a.club_id = b.club_id")
                ->innerJoin("user c ON b.user_id = c.user_id")
                ->where('a.club_id = 11');
    //echo $query->dump();
    $db->setQuery($query);
    $resultset = $db->loadAssocList();
    if (!$resultset) {
        echo "No Rows In Resultset";
    } else {
        foreach ($resultset as $row) {
            echo "<div>";
                echo "<div>First Name: {$row['firstname']}</div>";
                echo "<div>Last Name: {$row['lastname']}</div>";
                echo "<div>Lead Name: {$row['leadname']}</div>";
                echo "<div>Lead Description: {$row['lead_des']}</div>";
            echo "</div>";
        }
    }
} catch (Exception $e) {
    echo "Syntax Error "; // . $e->getMessage();
}
0
mickmackusa
$db = JFactory::getDbo();
$query = $db->getQuery(true);

// Select records from tables based on condition

$query->select('user.firstname, user.lastname, leadership.leadname, leadership.lead_des');
$query->from('CLUB, LEADERSHIP, USER');
$query->where('CLUB.CLUB_ID=11 AND LEADERSHIP.USER_ID=USER.USER_ID AND CLUB.CLUB_ID=Leadership.CLUB_ID');

$db->setQuery($query);
$result = $db->loadObjectList();

// fetch result

foreach($result as $row) {
    echo "First name ".$row->firstname;
    echo "Last name ".$row->lastname;
}
0
cslearner