doushupu2521 2013-08-12 06:58
浏览 38

PHP / MySQL:替换多个查询

I have two MySQL tables:

CREATE TABLE IF NOT EXISTS `table_a` (
  `keyA` int(11) NOT NULL AUTO_INCREMENT,
  `somevalue1` varchar(100) NOT NULL,
  `somevalue2` int(11) NOT NULL,
  PRIMARY KEY (`keyA`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `table_b` (
  `foreignkey_keyA` int(11) NOT NULL,
  `something1` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `table_a` (`keyA`, `somevalue1`, `somevalue2`) VALUES
(1, 'Data 1', 0),
(2, 'Data 2', 0);

INSERT INTO `table_b` (`foreignkey_keyA`, `something1`) VALUES
(1, 0),
(1, 0);

Now I want to get the data from table "table_b" for each entry from a SELECT query of "table_a":

$finalData = array();
$rows = "SELECT * FROM table_a";
foreach ($r in $rows)
{
   $r['table_b_data'] = "SELECT * FROM table_b WHERE foreignkey_keyA=" . $r['keyA'];
   $finalData[] = $r;
}
echo(json_encode($finalData);

So that the final json result looks like:

[
{"keyA":1, "somevalue1":"Data 1", "somevalue2":0, 
  "table_b_data":[
     {"foreignkey_keyA":1, "something1":0},
     {"foreignkey_keyA":1, "something1":0}
  ]
}
]

The problem with this is that in each foreach loop a MySQL query is performed. Is there a better (faster) way to do this? Another solution I can think of is to use a JOIN between the tables but then I have to post-process the resulting array to match the JSON output.

Regards,

  • 写回答

1条回答 默认 最新

  • dou448172583 2013-08-12 07:13
    关注

    use the following query to get data in single query

              select *  from table_b left inner join  table_a  on foreignkey_keyA=keyA 
    
    评论

报告相同问题?

悬赏问题

  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据