如何解决我将多条记录添加到一条记录中的MySQL Query
|| 所以我的措词真的很不好,所以请多多包涵。 我正在建立一个网站,人们可以在这里购买给孩子的礼物,每个孩子可以在清单中包含多个礼物。 我有两个表children
和gift_list
。这些表非常基本,具有以下行:
children
- id
- name
- age
- status
gift_list
- id
- child_id
- description
- status
我试图获取属于一个孩子的所有礼物并将它们作为孩子对象的数组返回,但结果却很奇怪。
这是我当前的sql语句:
SELECT * FROM children JOIN gift_list WHERE gift_list.child_id = children.id
结果是:
Child A:
- id
- name
- age
- status
- gift A
Child A:
- id
- name
- age
- status
- gift B
我知道我需要遍历gift_list
表,然后将它们添加到数组中,但是我是MysqL的新手,我迷失了这个概念,无法考虑如何正确搜索我的\正在努力实现。想法的最终结果将是:
Child A:
- id
- name
- age
- status
- gifts
- gift A
- description
- status
- gift B
- description
- status
任何帮助将非常感激!附带说明,也许很重要,我正在使用PHP框架CodeIgniter。
编辑:
经过几次使用下面建议的尝试失败后,我终于得到了下面的代码来工作...可能有更好/更清洁的方法...如果是的话,请提示我:)
$children = $this->db->get(\'children\');
$gift_list = $this->db->get(\'gift_list\');
foreach ( $children->result() as $child )
{
$gifts = array();
foreach ( $gift_list->result() as $gift )
{
if ( $child->id == $gift->children_id )
{
array_push($gifts,$gift);
$child->gifts = $gifts;
}
}
}
echo \"<pre>\";
print_r($children->result());
echo \"</pre>\";
感谢所有的建议!
解决方法
您需要执行2个不同的查询。第一个得到孩子,另一个得到他们的礼物。
第一个查询的示例:
SELECT * FROM children WHERE ... any children-related criteria here ...
您现在应该拥有数组(尚无礼物):
Child A:
- id (let\'s say this equals 1)
- name
- age
- status
Child A:
- id (let\'s say this equals 2)
- name
- age
- status
重要的是,该数组的键是子ID(嗯,至少这会使事情变得容易)。
使用该数组,构建以下查询:
SELECT * FROM gift_list WHERE child_id IN (1,2);
您可以使用类似的方法进行操作:
$gifts_sql = \'SELECT * FROM gift_list WHERE child_id IN (\' . implode(\',\',array_keys($children)) . \')\';
现在,您应该遍历该查询的结果,并将其附加为:
while ($row = mysql_fetch_assoc($result)) {
$children[$row[\'child_id\']][\'gifts][$row[\'gift_id\']] = $row;
}
您的$children
数组现在应该看起来像您想要的样子。
, 您说您正在得到奇怪的结果,但不是那些结果。如果要以某种方式遍历查询结果,也许您需要对结果进行排序?添加类似
ORDER BY children.id,gift.id
到最后。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。