sách gpt4 ai đã đi

php - Truy vấn SQL cứng

In lại 作者:行者123 更新时间:2023-11-29 22:18:55 26 4
mua khóa gpt4 Nike

我有一个不寻常的 SQL 问题,我不太确定如何最好地解释,所以请耐心等待。我有三张表,一张是志愿者组织的表,一张是用户的表,一张是用户详细信息的表。

#Table 1#
## Name President Secretary Treasurer
----------
ABC 571 123 456
DEF 457 582 444

#Table 2#
## Id Name
----------
571 Joe Blogs
123 Joanne Blogs

#Table 3#
## Id Address City
----------
571 123...... Somewhere
123 456..... Somewhere Else

我想做的是允许用户按照组织名称的顺序组装 PDF 地址标签,这样他们可能会说他们想要每个组织的主席或主席和秘书,这样它就会读取主席和秘书所有组织的 ID,并将它们加入到地址详细信息中,并按照组织的顺序进行组装。他们可以选择只担任主席,或担任主席和秘书,或以上的任意组合。它必须按组织顺序排序并按此顺序返回用户对象。

Ví dụ

ABC -> President
ABC -> Secretary
DEF -> President
DEF -> Secretary

我尝试了几种选择。第一个是,

$query = $db->getQuery(true);
$query->select($db->quoteName('a.name'));
$query->select($db->quoteName($this->show_exec));
$query->from($db->quoteName('#__agshows_shows', 'a'));
$tableACount = 'b';
$tableBCount = 'aa';
foreach($this->show_exec as $column){
$query->select($db->quoteName(array($tableACount . '.user_id', $tableACount . '.address_1', $tableACount . '.address_2', $tableACount . '.city', $tableACount . '.region', $tableACount . '.postal_code', $tableBCount . '.name')))
->join('LEFT', $db->quoteName('#__agshows_user_profile', $tableACount) . ' ON (' . $db->quoteName($tableACount . '.user_id') . ' = ' . $db->quoteName($column) . ')')
->join('LEFT', $db->quoteName('#__users', $tableBCount) . ' ON (' . $db->quoteName($tableBCount . '.id') . ' = ' . $db->quoteName($column) . ')');

$tableACount ++;
$tableBCount ++;
}

switch($this->show_sort) {

case 'a.title':
$query->order($db->quoteName('a.title') . ' ASC');
phá vỡ;

case 'a.groupid':
$query->order($db->quoteName('a.groupid') . ' ASC');
phá vỡ;

mặc định:
$query->order($db->quoteName('a.title') . ' ASC');
}

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

问题在于,当它通过 foreach 循环时,每个组织都会相互覆盖。我希望它是灵活的($this->show_exec 包含一个可供选择的列数组,即 a.president、a.secretary)。

第二个选项是,

if(!empty($this->show_exec)) {
// Get the Show Exec user IDs.
$query = $db->getQuery(true);
$query->select($db->quoteName($this->show_exec));
$query->from($db->quoteName('#__agshows_shows'));
$db->setQuery($query);
$show_users = $db->loadAssocList();


foreach ($show_users as $shows) {
foreach ($shows as $key=>$value) {
if($value != 0) {
$user_ids[]=$value;

}
}
}
}

$query = $db->getQuery(true);
$query->select('a.*');
$query->from($db->quoteName('#__agshows_user_profile') . ' AS a');

// Join over the users names.
$query->select('uc.name')
->join('LEFT', '#__users AS uc ON uc.id=a.user_id');

$query->where('a.user_id IN ('. implode(',', $user_ids) . ')');

$query->order($db->escape('a.city asc'));

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

这个问题是 $users_id 的顺序正确,但是当它查询第二个表时,它没有引用排序依据,只是按照第二个表的顺序返回,而不是我想要的顺序... .

有没有一种干净的方法可以同时完成这一切?

或者有没有办法对第二个查询进行排序以按 $user_ids 数组的顺序返回结果?

我希望这是有道理的..

Cảm ơn

1 Câu trả lời

我认为以下查询可能适合您:

    LỰA CHỌN 
*
FROM
(SELECT
o.name AS org_name,
u1.name AS username,
'president' AS `type`
FROM
org o
LEFT JOIN users u1
ON u1.`id` = o.`president`
UNION
ALL
LỰA CHỌN
o.name AS org_name,
u1.name AS username,
'secretary' AS `type`
FROM
org o
LEFT JOIN users u1
ON u1.`id` = o.`secretary`
UNION
ALL
LỰA CHỌN
o.name AS org_name,
u1.name AS username,
'treasurer' AS `type`
FROM
org o
LEFT JOIN users u1
ON u1.`id` = o.`treasurer`) AS a
ORDER BY a.org_name ;

我假设用户表的主键将用作组织表中的总裁、秘书和财务主管列中的外键。

下面的查询输出将生成一个虚拟列“type”,您可以在代码中使用它来确定组织中该特定用户的角色。此外,您还需要动态创建此查询,以处理仅需要总裁、秘书、财务主管或它们的任意组合的情况。

关于php - 硬 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30935261/

26 4 0
Bài viết được đề xuất: android - onConfigurationChanged 未被调用
Bài viết được đề xuất: android - Eclipse 中的 ADT 插件问题
Bài viết được đề xuất: android - 在线程之间显示进度对话框?
Bài viết được đề xuất: Mysql JOIN 选择语句
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com