【问题标题】:How to do multiple INNER JOIN dynamically in php如何在php中动态进行多个INNER JOIN
【发布时间】:2013-08-11 22:46:31
【问题描述】:

这是我第一次使用多个INNER JOINS 编写代码,它们的关系只是一张表。

这就是我正在做的:

$table = $_POST['tabla'];
$campos = $_POST['campos'];
$campoRelacion = $_POST['campo_relacion'];

    **//Code that i forget to put**

   *// Create an array that will contain the fields
   $ field = array ();

   //walk the array of fields and is assigned to the array
   //that was created previously
    foreach ($ fields as $ val) {
      $ field [] = "". $ val. "";
    }

   //We separate the fields in the array with commas
   $ field = join (',', $ field);*


$mainTable = $table[0];


$sql = 'SELECT '.$field.'
        FROM '.$mainTable.' ';

for ($i = 1; $i<count($table); $i++) { 
    $curTable = $table[$i];
    $joinField = $campoRelacion[$i-1];
    $sql.= 'INNER JOIN '.$curTable.' 
            ON '.$mainTable.'.'.$joinField.' = '.$curTable.'.'.$joinField.' '; 
}

根据我发送的数据,这个输出会是这样的:

SELECT
slip_plantillas.nombre,
cat_reaseguradoras.nombre,
slips.numero_referencia,
slips.asegurado_original,
tipo_operaciones.nombre
FROM
slips
Inner Join slip_plantillas ON slips.slip_plantillaID = slip_plantillas.slip_plantillaID
Inner Join cat_reaseguradoras ON slips.cat_reaseguradoraID = cat_reaseguradoras.cat_reaseguradoraID
Inner Join tipo_operaciones ON slips.tipo_operacionID = tipo_operaciones.tipo_operacionID

如上表所示,代码滑动在连接中保持不变。

但现在我有另一个 sql 语句,我想在不固定的地方创建并更改联合。

查询如下所示:

SELECT
slip_dos_reasegurado.prima_cien,
slip_dos_reasegurado.porcentaje_aseguradora,
cat_reaseguradoras.nombre,
slip_dos_capas.capa,
slip_dos_capas.prima_capa,
slip_dos_pagos.cantidad,
slip_dos_pagos.referencia,
estatus.nombre,
slips.tipo_negocio
FROM
slips
Inner Join slip_dos_reasegurado ON slips.slipID = slip_dos_reasegurado.slipID
Inner Join slip_dos_capas ON slip_dos_capas.slip_dos_reaseguradoID = slip_dos_reasegurado.slip_dos_reaseguradoID
Inner Join slip_dos_pagos ON slip_dos_capas.slip_dos_capaID = slip_dos_pagos.slip_dos_capaID
Inner Join cat_reaseguradoras ON cat_reaseguradoras.cat_reaseguradoraID = slip_dos_reasegurado.cat_reaseguradoraID
Inner Join estatus ON estatus.estatusID = slip_dos_pagos.estatusID

如您所见,如果根据字段关系不相互混合,则关系不再是单个表。

【问题讨论】:

  • 第二种情况下什么不起作用?
  • 即使编辑了你的帖子,我仍然不知道你在问什么
  • 第二种情况下什么都没有,因为我不知道该怎么做。我的问题是如何在 php 中做第二种情况?

标签: php sql join dynamic


【解决方案1】:

也许你需要这个?

<?php
$tables = array('tbl1','tbl2','tbl3','tbl4');
$columnTable = array('column1','column2','column3','column4');
$columnRelation =     array('column_relation1','column_relation2','column_relation3','column_relation4');


$mainTable = $tables[0];


$sql = 'SELECT *
    FROM '.$mainTable.' ';

foreach($tables as $index=>$tbl){
    if($index == 0) continue; //Normal only while you know that your array indexes start from 0, in other case you would need variable for this
    $sql .= 'INNER JOIN $tbl ON '.$tbl.'.'.$columnTable[$index].' = '.$tables[$index-1].'.'.$columnRelation[$index-1].' ';
}

echo $sql;
?>

【讨论】:

  • 感谢您的回答,我认为我没有解释清楚。
  • 感谢您的回答,我认为我没有很好地解释我。就是这样做我尝试了 php 中的第二个 sql statemant 第一部分,如果我出去并获得良好的 INNER JOIN 语句,则从复选框发送所需的信息。 $table // 是一个复选框数组 tabla[] $campos // 另一个带有复选框 campos[] 的数组 $campoRelacion // 带有 checkbos 的数组 campo_relacion[] 我尝试做的是 php 中的第二个 sql 语句和第一个一样,但是第二部分现在 $mainTable 变量不是常量。现在变量 $ mainTable 是可变的,但有时会重复。
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多