【问题标题】:How to match two table columns in sql如何匹配sql中的两个表列
【发布时间】:2020-10-31 23:44:52
【问题描述】:

我有这个代码

$db = \Config\Database::connect();

$query = $db->query("select * from g WHERE g_status = '0' ORDER BY g_date ASC Limit 10;");
foreach ($query->getResult() as $g) {
    $g_amount = $g->g_amount;
 }

$query2 = $db->query("select * from g WHERE p_status = '0' ORDER BY p_date ASC Limit 10;");
foreach ($query2->getResult() as $p) {
    $p_amount = $p->p_amount;
 }

if($p_amount ==  $g_amount){

echo "do something";

}else{

echo "No match";
}

在这里,我试图在表 g 和表 p 之间进行匹配......如果表 g 中的任何列 == 表 p 中的任何列,无论列数如何,请执行某些操作,但它总是回显“不匹配”

如果表中的行数很多,我会设置“限制 10”,它只会与“排序”命令匹配前 10 行。

我需要一些帮助。

【问题讨论】:

  • 如果您要在两个表之间进行匹配,为什么两个查询都只引用一个表?样本数据和期望的结果将阐明您想要做什么。
  • 你的foreach() 没有意义。 $p_amount 将始终设置为迭代中的最后一项。

标签: php mysql sql select codeigniter-4


【解决方案1】:

首先,以数组的形式获取数据

$db = \Config\Database::connect();
$query = $db->query("select * from g WHERE g_status = '0' ORDER BY g_date ASC Limit 10;");
$g_results = $query->getResult('array'); 
$g_amounts = array_column($g_results,'g_amount');

$query2 = $db->query("select * from g WHERE p_status = '0' ORDER BY p_date ASC Limit 10;");
$p_results = $query2->getResult('array'); 
$p_amounts = array_column($p_results,'p_amount');

foreach(array_intersect($g_amounts,$p_amounts) as $amount){
   echo "do something";
}

【讨论】:

    【解决方案2】:

    为什么不使用JOIN 看看它是否返回了什么?不确定我的语法是否正确,我不经常做 JOIN:

    SELECT * FROM g g_table JOIN p p_table ON g_table.g_amount = p_table.p_amount WHERE g_table.status = '0' AND p_table.status = '0'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2017-07-23
      • 2014-09-15
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      相关资源
      最近更新 更多