【发布时间】:2011-07-06 13:27:51
【问题描述】:
我编写了一个查询,它使用 WHERE a.id = ? 为整个集合或单个文章正确返回具有一些多对多连接的所有记录。
SELECT a.id, date_added, title, content, category_id, person_id, organization_id, c.name AS category_name, firstname, lastname, o.name AS organization_name 来自文章作为 左外连接articles_categories AS ac ON a.id=ac.article_id LEFT OUTER JOIN categories AS c ON c.id=ac.category_id 左外连接articles_people AS ap ON a.id=ap.article_id LEFT OUTER JOIN people AS p ON p.id=ap.person_id 左外连接articles_organizations AS ao ON a.id=ao.article_id LEFT OUTER JOIN 组织 AS o ON o.id=ao.organization_id ORDER BY date_added但是!
我在试图弄清楚如何将文章限制为特定数量的 ID 以使用分页时遇到了困难。
理想情况下,我尝试使用尽可能简单明了的 SQL 语句,因为我正在使用带有活动记录类的 codeigniter 框架。 http://codeigniter.com/user_guide/database/active_record.html
非常感谢一些帮助,因为我不想恢复为此使用多个查询,因为我已尝试将其减少为单个查询以提高数据库效率。
四处搜索并尝试了一些替代方案,但似乎没有任何效果。非常感谢!
比如我返回的结果是这样的
-------------------------------------------------- ------------------ id title category_id person_id organization_id -------------------------------------------------- ------------------ 1 次测试 1 1 1 1 次测试 2 1 1 1 次测试 1 2 1 1 次测试 1 1 2 1 次测试 5 1 1 1 次测试 8 1 1 1 次测试 1 4 1 1 次测试 1 4 2 1 次测试 1 1 1 2 测试 2 2 1 1 2 测试 2 1 2 1 2 测试 2 1 1 2 2 测试 2 5 1 1 2 测试 2 8 1 1 2 测试 2 1 4 1 2 测试 2 1 4 2我需要这样的结果,这样我就可以在 php 中创建这样的子数组:
$articles = $query->result_array();
$output = array();
foreach ($articles as $article) {
// set up article details
$article_id = $article['id'];
// add article details
$output[$article_id]['article_id'] = $article_id;
$output[$article_id]['date_added'] = $article['date_added'];
$output[$article_id]['title'] = $article['title'];
$output[$article_id]['content'] = $article['content'];
// set up people details and add people array with details if exists
if (isset($article['person_id'])) {
$person_id = $article['person_id'];
$output[$article_id]['people'][$person_id]['person_id'] = $person_id;
$output[$article_id]['people'][$person_id]['lastname'] = $article['lastname'];
$output[$article_id]['people'][$person_id]['firstname'] = $article['firstname'];
}
// set up organizations details and add organizations array with details if exists
if (isset($article['organization_id'])) {
$organization_id = $article['organization_id'];
$output[$article_id]['organizations'][$organization_id]['organization_id'] = $organization_id;
$output[$article_id]['organizations'][$organization_id]['organization_name'] = $article['organization_name'];
}
// set up categories details and add categories array with details if exists
if (isset($article['category_id'])) {
$category_id = $article['category_id'];
$output[$article_id]['categories'][$category_id]['category_id'] = $category_id;
$output[$article_id]['categories'][$category_id]['category_name'] = $article['category_name'];
}
}
但如果我只使用 LIMIT(带有偏移量等)1
我得到的结果是
-------------------------------------------------- ------------------ id title category_id person_id organization_id -------------------------------------------------- ------------------ 1 次测试 1 1 1而不是
-------------------------------------------------- ------------------ id title category_id person_id organization_id -------------------------------------------------- ------------------ 1 次测试 1 1 1 1 次测试 2 1 1 1 次测试 1 2 1 1 次测试 1 1 2 1 次测试 5 1 1 1 次测试 8 1 1 1 次测试 1 4 1 1 次测试 1 4 2 1 次测试 1 1 1这是我想要的结果。
【问题讨论】:
标签: php mysql database codeigniter