php 跨服务器 mysql_php – 跨服务器的Mysql查询,不使用联合表

首先,联合表是更好的解决方案(它们是针对您尝试手动完成的那种方式而制作的).但你不想要它们,所以这是下一个最好的事情:

对于比第一个示例更复杂的事情,您应该通过插入表格内容而不是表格来手动模拟远程表格.

我将以这种方式重写你的第一个例子,因为你的第二个例子搞砸了,我甚至不知道你想要在那里表达什么.

使用1台服务器时,您有以下代码:

select name from Enterprise E

inner join Users U on E.cod = U.cod

where E.cod = $my_code and U.codUsers in ($users);

您现在可以将表替换为表的实际数据:

select name from Enterprise E

inner join

( select 1 as cod,4 as codUsers,20 as codHistory

union select 2 as cod,8 as codUsers,500 as codHistory

union select 3 as cod,29 as codUsers,100 as codHistory

) as U

on E.cod = U.cod

where E.cod = $my_code and U.codUsers in ($users);

要做到这一点,你必须将表数据构建为一个字符串(我在这里使用pdo):

foreach($db->query('select * from Users U where U.codUsers in ($users)') as $row) {

if($data !== '') { $data .= 'union '; }

$data .= 'select ' . $row['cod'] . ' as cod,'

. $row['codUsers'] . ' as codUsers,'

. $row['codHistory'] . ' as codHistory ';

}

当然,你必须使它适合你的Users-table的布局(并且不要忘记一些’用于字符串列),并且你可以省略你不需要的列.

您现在可以将该字符串放在您拥有Users-table之前的任何位置,并将您的代码编写为在1台服务器上,因此您的第一个代码看起来像

select name from Enterprise E

inner join ($data) as U on E.cod = U.cod

where E.cod = $my_code and U.codUsers in ($users);

和你的第二个代码(虽然我提醒你,它开始时是破碎的,也不会在1台服务器上运行)看起来像

select e.name,h.history from thirdtable

inner join ($data) as u on e.cod = u.cod

where u.codHistory in (1,3)

group by u.cod)

你应该确保只有少量用户进入你的$data-string,然后这将正常工作.否则,您确实需要联合表.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值