web-dev-qa-db-ja.com

JDatabaseメソッドを使用して、JOINロジックでMySQLクエリを作成する方法

ANDクエリメソッドが見つからないため、このSQLスクリプトをJDatabaseメソッドに変換するのに苦労しています。

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;

JDatabaseのドキュメント を見ていましたが、ANDで何も表示されません。

Joomlaのクエリ構文を使用してクエリを作成するにはどうすればよいですか?

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');

ANDで結合されたデフォルトの複数のwhere句。上記のwhere関数の2番目のオプションとして、接着剤(ANDまたはOR)を明示的に指定できますが、これはオプションです。 JDatabaseQuery-> where関数のJoomla APIドキュメントからの引用:

string $ glue-条件を結合するための接着剤。デフォルトはANDです。接着剤は最初の使用時に設定され、変更できないことに注意してください。

または、1つのwhere句に手動で組み合わせることができます。このメソッドを使用して、ORとANDを複雑なクエリのwhere句で組み合わせることができます。

$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

and句は次のように使用できます。

$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

JOINテーブルへの手段としてのカンマ の使用は、古いスタイルの構文です。最近では、MySQLは結合の意図をよりよく説明するためのより多くのキーワードを提供しています(コードの読みやすさの向上)。

コンマは_INNER JOIN_ sを表し、Joomlaは指定されたクエリメソッドを持っています。

以下では、コードの処理とデバッグに役立つ_try {} catch{}_ブロックをお勧めします。テーブル、列、値のいずれもバックティックまたは単一引用符の折り返しを必要としないため、$db->qn()または$db->q()メソッドを呼び出しません。 realクエリに変数がある場合、またはこれらの考慮事項が必要な場合、私のスニペットはこれらの修正を受け取るのに適しています。

_$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