グループの一部であるユーザーからユーザーIDを取得しようとしています。次に、それらのユーザーIDを取得して、それらのユーザーIDのメールアドレスを取得する必要があります。結果はカンマで区切る必要があります。私が最初にこれを試みたとき、私はユーザーIDが必要だと思ったので、以下を書きました。これはうまく機能し、すべてのIDをコンマ区切りのリストで提供します。以下のクエリの結果を使用してデータベースから電子メールアドレスを取得する方法に困惑していますlc_users WHERE 'id' =以下のクエリの結果
$db = JFactory::getDbo();
$db->setQuery("SELECT `memberid` FROM `lc_community_groups_members` WHERE `groupid` = 1 AND `approved` = 1 ");
$column = $db->loadColumn();
return(implode(',',$column));
どんな助けでも大歓迎です
はい、JOINはトリックを行う必要があります。これが私のクエリです:
$query->select($db->quoteName('b.email'))
->from($db->quoteName('#__community_groups_members', 'a'))
->leftJoin(
$db->quoteName('#__users', 'b')
. ' ON (' . $db->quoteName('b.id')
. ' = '
. $db->quoteName('a.memberid') . ')'
)
->where($db->quoteName('a.groupid') . ' = 1 ')
->where($db->quoteName('a.approved') . ' = 1');
まず、ドキュメントページに示されているように、データベースクエリに最新のコーディング標準を使用することをお勧めします。
実際には、join
を使用してすべてを1つのクエリに結合できます。また、#__
をデータベースプレフィックスとして使用し、自動的にlc_
に置き換えます。
結合には自信がありませんが、認めますが、次のことを試してみます。
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('a.*', 'b.memberid')))
->from($db->quoteName('#__community_groups_members', 'a'))
->where($db->quoteName('groupid') . ' = 1')
->where($db->quoteName('approved') . ' = 1')
->join('INNER', $db->quoteName('#__users', 'b') . ' ON (' . $db->quoteName('b.email') . ' = ' . $db->quoteName('b.id') . ')')
->where($db->quoteName('b.id') . ' = ' . $db->quote('b.memberid'));
$db->setQuery($query);
$column = $db->loadColumn();
あなたのタスクは、コンマ区切りの電子メールアドレスを含む単一の文字列を望んでいます-SQLはそれらすべてに加えていくつかの便利な繁栄を行うことができます。
$db = JFactory::getDBO();
try {
$query = $db->getQuery(true)
->select("GROUP_CONCAT(DISTINCT B.email ORDER BY B.email)")
->from("lc_community_groups_members A")
->innerJoin("lc_users B ON A.memberid = B.id")
->where("A.groupid = 1 AND A.approved = 1");
//echo $query->dump();
$db->setQuery($query);
if (!$emails = $db->loadResult()) {
echo "No Qualifying Email Addresses";
} else {
echo $emails;
}
} catch (Exception $e) {
echo "Syntax Error"; // . $e->getMessage();
}
次のようなサンプルデータを使用します。
| lc_community_groups_members | JOIN ON memberid=id | lc_users |
|-------------------------------------| |-------------------------|
| memberid | groupid | approved | | id | email |
|------------|-----------|------------| |-------------------------|
| 1 | 2 | 1 | < | 1 | [email protected] |
| 2 | 1 | 1 | < | 2 | [email protected] |
| 3 | 1 | 0 | < | 3 | [email protected] |
| 4 | 1 | 1 | < | 4 | [email protected] |
| 5 | 1 | 1 | < | 5 | [email protected] |
| 6 | 2 | 0 | < | 6 | [email protected] |
| 7 | 1 | 0 | < | 7 | [email protected] |
| 8 | 1 | 1 | < | 8 | [email protected] |
| 9 | 1 | 1 | < | 9 | [email protected] |
--------------------------------------- ---------------------------
次のIDからのメールを期待しています:2,4,5,8,9
私のコードブロックからの出力は次のとおりです。
[email protected],[email protected],[email protected],[email protected]