假设我有这个查询:
<?
$qi = $db->prepare('SELECT one.id, one.Value, two.Name, three.nfid, temp.Name AS Alias
FROM one
INNER JOIN two ON one.fid = two.id
LEFT OUTER JOIN three ON two.fid = three.fid
LEFT OUTER JOIN (SELECT id,Name FROM two) AS temp ON three.nfid = temp.id
WHERE one.rid = ?
ORDER BY one.id ASC');
$qi->execute( array( $id ) );
?>
表之间的连接是:
表一包含许多行,one.Value
其中包含one.rid
和字段one.fid
。
fid
是与表2的连接,其中包含two.Name
项目 ( one.fid
= two.id
)。
但有时该项目是另一个项目的别名,这就是表3存在的原因。它包含字段three.fid
和three.newfid
where three.newfid
= two.id
(但对于另一个带有另一个的项目two.Name
)
该查询应该从一个具有特定one.rid
和 get的行中获取所有行one.Value
,two.Name
如果有一个three.fid
for this one.fid
,则 get two.Name
for three.newfid
并将其命名为 Alias。
有没有办法改进这个查询或以另一种方式解决问题?也许重塑数据库的布局?目前速度很慢。此处的示例已被简化以使其更通用。
谢谢你。