【问题标题】:Order 2 tables by the same field in each table, mysql, classic asp按每张表相同字段排序2张表,mysql,经典asp
【发布时间】:2024-01-14 04:44:01
【问题描述】:

我正在尝试订购 2 个表中的数据以显示在一个列表中,同时也基于第三个表中的 id。

表 3 包含其他 2 个表的 ID。

e_allocation table
------------------
eid, sid, iid

5, 1234, NULL

5, NULL, 1234

表 1 和表 2 是相似数据的表。

i_status table
--------------
iid, status

1234, Complete

1235, Complete

1236, Not Complete
s_status table
--------------
sid, status

1234, Complete

1235, Not Complete

1237, Not Complete
objCon.Execute ("SELECT a.sid, a.iid, b.status AS istats, c.status AS sstats
FROM e_allocation a LEFT JOIN i_status b ON a.iid=b.iid LEFT JOIN s_status c
ON a.sid=c.sid WHERE a.eid = '5' ORDER BY b.status Desc, c.status Desc")

所以目前我可以从数据库中获取数据,但它显然先订购表 b,然后再订购 c。我需要这些按加入顺序订购。

目前返回(Table=I or S, Record ID=1234, Status = Complete or Not Complete)

I:1234:Complete

I:1235:Complete

I:1236:Not complete

S:1234:Complete

S:1235:Not Complete

S:1237:Not Complete

我想得到:

I:1234:Complete

S:1234:Complete

I:1235:Complete

S:1235:Not Complete

I:1236:Not complete

S:1237:Not Complete
while not objDb.EOF
    sid = objDb("id")
    iid = objDb("iid")
    if sid <>"" then datlst = datlst &"S:"& sid &":"&objDb("sstats")&",<BR>"
    if iid <>"" then datlst = datlst &"I:"& iid &":"&objDb("istats")&",<BR>"
    objDb.MoveNext
Wend
response.write datlst

非常感谢任何指向正确方向的指针? 谢谢

【问题讨论】:

  • 老实说,我无法看到您的 SQL 语句是如何生成 I' 或 S' 的,请剪切并粘贴您在屏幕上实际看到的输出以及您想看到的内容。
  • I 或 S 只是显示数据来自哪个表,因此人们知道它是什么类型。
  • 好的,所以你的排序实际上是在 asp 代码中 - 抱歉,其他人将不得不帮助你。
  • 谢谢曼迪,如果它可以在 sql 语句中完成,那么我很愿意接受建议,我只是这样做以获得结果,尽管不是正确的!我确实需要通过 i_status 或 s_status 知道它来自哪个表。

标签: mysql asp-classic


【解决方案1】:

这是我的尝试。

create table e_allocation (eid int, sid int, iid int);
insert into e_allocation select 5, 1234, NULL;
insert into e_allocation select 5, NULL, 1234;
insert into e_allocation select 5, 1235, NULL;
insert into e_allocation select 5, NULL, 1235;
insert into e_allocation select 5, 1236, NULL;
insert into e_allocation select 5, NULL, 1236;

create table i_status (iid int, status varchar(25));
insert into i_status select 1234, 'Complete';
insert into i_status select 1235, 'Complete';
insert into i_status select 1236, 'Not Complete';

create table s_status (sid int, status varchar(25));
insert into s_status select 1234, 'Complete';
insert into s_status select 1235, 'Not Complete';
insert into s_status select 1237, 'Not Complete';

SELECT
  case when a.sid is null then 'I' else 'S' end as iors,
  ifnull(a.sid,a.iid) as id,
  ifnull(b.status,c.status) as status
FROM e_allocation a LEFT JOIN i_status b ON a.iid=b.iid LEFT JOIN s_status c
ON a.sid=c.sid
WHERE a.eid = '5' and (b.status is not null or c.status is not null)
ORDER BY id, iors

下次请务必提供 CREATE TABLE 等语句,这样我们就不必输入它们了。

【讨论】:

  • 非常感谢 MandyShaw 在重播我解释得很糟糕的问题时的提示和漂亮的位置;o),这几乎就是我所追求的,我只需将 ORDER BY 更改为 ORDER BY 状态描述,id,iors。
最近更新 更多