Php 为不同的结果连接查询

Php 为不同的结果连接查询,php,sql,oracle,join,Php,Sql,Oracle,Join,我有3个查询,执行和加载页面网格中的结果花费了太多的时间,因此我想使用连接将其优化为单个查询 我无法获得如何实现这一目标的想法。你们谁能在这里指导我如何从下面3个查询中获得一个查询 $ikt = $row['2']; $id = $row['0']; $record = $row['1']; $sql2 = "SELECT * FROM `plant_records` WHERE IKT = '".$ikt."' AND Record='".$record."'"; $adddetails2

我有3个查询,执行和加载页面网格中的结果花费了太多的时间,因此我想使用连接将其优化为单个查询

我无法获得如何实现这一目标的想法。你们谁能在这里指导我如何从下面3个查询中获得一个查询

$ikt = $row['2'];
$id = $row['0'];
$record = $row['1'];


$sql2 = "SELECT * FROM `plant_records` WHERE IKT = '".$ikt."' AND Record='".$record."'";
$adddetails2    = mysql_query($sql2);
$recorddetails2 = mysql_fetch_assoc($adddetails2);
$num_rows3      = mysql_num_rows($adddetails2);
if($num_rows3 > 0){
    $storeData[$i][] ='Filled';
 }
else{
    $storeData[$i][] ='Not Filled';
 }


$sql5= "SELECT * FROM `plant_overview` WHERE IKT = '".$ikt."' AND ID_Record='".$record."'";
$adddetails5    = mysql_query($sql5);
$recorddetails5 = mysql_fetch_assoc($adddetails5);
$num_rows6      = mysql_num_rows($adddetails5);
if($num_rows6 > 0){
$storeData[$i][] ='Filled';
    }
else{
    $storeData[$i][] ='Notfilled';
}       


$sql3  = "SELECT * FROM `plant_info` WHERE TG_ID = $id and Present != '' ";
$adddetails3    = mysql_query($sql3);
$recorddetails3 = mysql_fetch_assoc($adddetails3);
$num_rows4      = mysql_num_rows($adddetails3);
if($num_rows4 > 0){
    $storeData[$i][] ='Filled';
}
else{
    $storeData[$i][] ='Notfilled';
}   



 Status: listdata[i]['16'],
 Records: listdata[i]['17'],
 Checking: listdata[i]['18'],
我需要在不同的listdata中显示结果,因为我必须根据这些结果显示不同的数据

编辑 这是我的桌子结构

主表

ID (int - PK)
Record (varchar)
IKT (varchar)

( The below are refering to the above table <br>
$ikt = $row['2'];
$id = $row['0'];
$record = $row['1'];
)
如果主表中存在ID_记录和IKT,则填写,否则不填写 工厂信息

ID (int - PK)
TG_ID (int - this is refering to the ID column in master table)<br>
Present (varchar)
result (varchar)
如果TG_ID存在于主_表中且不为空,则填写,否则不填写 评论中的问题2:我将如何使用来自不同listdata的数据

答:在slickgrid中,我有工厂记录、工厂概览、工厂信息列

根据填充/未填充的数据,我将在网格中显示不同的图像

例如,Slickgrid中的厂内记录列。。如果值已填充,我将显示图像A,如果值未填充,我将显示图像B


滑动网格中的厂内_概览栏。。如果值已填充,我将显示图像C,如果值未填充,我将显示图像D。

是否只需检查表中是否存在匹配项?你可以用EXISTS或IN来做这件事

加入以下条款:


仅使用idx3或idx4。你可以检查哪个,然后放下另一个。当然,DBMS可能不使用任何索引。他们只是一个提议。DBMS将决定是否使用它们。

每次在新代码中使用数据库扩展时,它都会被弃用,并且已经使用多年,在PHP7.0+中永远消失。如果您只是在学习PHP,请将精力花在学习PDO或mysqli数据库扩展和准备好的语句上。在应用程序中使用时避免*。这可能会给您带来麻烦..如果您为这3个表设置模式,那将非常有用我假设您已经检查了相关列上是否有有用的索引,因为您合并这些查询的要求似乎与您关于需要在不同的listdata元素中获得结果的评论相冲突,您能否解释一下,一旦从数据库中选择此数据,将如何使用此数据。Exists查询工作正常,但如何在listdata中使用它们?状态:listdata[i]['16'],记录:listdata[i]['17'],检查:listdata[i]['18'],就像之前在问题中发布的一样..如果您错过了,很抱歉。。我想要每个listdata中的输出。关于如何做到这一点,我做了进一步的工作,现在一切都好了。非常感谢你的帮助。
ID (int - PK)
IKT (varchar)
ID_Record (varchar)
Subject (varchar)
ID (int - PK)
TG_ID (int - this is refering to the ID column in master table)<br>
Present (varchar)
result (varchar)
select 
  id, record, ikt,
  case when exists (select * from plant_records pr where pr.ikt = mt.ikt and pr.record= mt.record)
       then 'Filled' else 'Not filled' end as pr_filled,
  case when exists (select * from plant_overview po where po.ikt = mt.ikt and po.record= mt.record)
       then 'Filled' else 'Not filled' end as po_filled,
  case when exists (select * from plant_info pi where pi.tg_id = mt.id and pi.present <> '')
       then 'Filled' else 'Not filled' end as pi_filled
from master_table mt;
select 
  id, record, ikt,
  case when (ikt, record) in (select ikt, record from plant_records)
       then 'Filled' else 'Not filled' end as pr_filled,
  case when (ikt, record) in (select ikt, record from plant_overview)
       then 'Filled' else 'Not filled' end as po_filled,
  case when (id) in (select tg_id from plant_info where present <> '')
       then 'Filled' else 'Not filled' end as pi_filled
from master_table;
create index idx1 on plant_records (ikt, record);
create index idx2 on plant_overview (ikt, record);
create index idx3 on plant_info (tg_id, present);
create index idx4 on plant_info (present, tg_id);