我在MySql DB中有两个表:
项
文件夹
从针对搜索索引的查询中,我获得了与查询匹配的项目和文件夹的有序ID列表。例如,(“ph76gjd”,34,“rh75ghd”,“gr45gfd”)。当然,在大多数情况下,该集合将远大于此。我在结果集中也有我想要的列表列,并且这些列中的某些列可能不存在于两个表中。例如,(“id”,“name”,“modified_at”)。
我正在寻找一种通过查询数据库来有效构建结果集的方法。
我正在使用Ruby on Rails但我不认为编程语言真的是一个因素,因为我希望主要在SQL中这样做。任何帮助表示赞赏。
更新
感谢您的回答,但我想我还不够清楚。就这个问题而言,表格是无关的。我按照它们应该出现的顺序有一系列我想要的行ID,我想要的是从数据库中提取额外的列数据。
答案 0 :(得分:3)
您可以使用UNION
,FIELD
和select_rows
的组合获得所需的结果。
#ids is an array of id's
results = Items.connection.select_rows("
SELECT A.id, A.name, A.description, A.modified_at, NULL AS parent_id
FROM items A
WHERE A.id IN (#{ids.join(',')})
UNION
SELECT B.id, B.name, NULL AS description, NULL AS modified_at, B.parent_id
FROM folders B
WHERE A.id IN (#{ids.join(',')})
ORDER BY FIELD(id, #{ids.join(','))
")
结果按照id的顺序排序。这适用于MySQL。
答案 1 :(得分:1)
尝试以下内容...
选择f.id,f.name,i.id,i.name, i.modified_date来自我离开的项目 在i.id = f.parent_id上加入文件夹f 按i.modified_date排序
希望它有所帮助,
桑蒂! :)
答案 2 :(得分:0)
根据您的描述,这两个表是如何相关的并不明显。
听起来像是一对多关系(例如文件夹中有一个或多个项目;一个项目只属于一个文件夹),但这通常意味着两个表之间的外键关系:
create table folder
(
id int not null auto increment,
name varchar(80) not null,
primary key(id)
);
create table item
(
id int not null auto increment,
name varchar(80) not null,
folder_id int,
modified date,
primary key(id),
foreign key folder_id references table folder(id)
);
您的查询如下:
select folder.id, folder.name, item.id, item.name, item.modified_date
from folder, item
where folder.id = item.folder_id
order by item.modified_date desc;