我有两个查询的PHP代码。一个是在Oracle数据库中,结果是大约100行数据(在数据中有SKU编号)。另一个是在一个mysql数据库中,有大约30行数据(数据也有SKU编号)。
我需要逐行比较第一个查询中的每个SKU和第二个查询。如果第一个查询中的SKU也出现在第二个查询中,那么我需要它来回显SKU。
第二个查询中的所有SKU都在第一个查询中,因此我希望结果能够回显所有30个SKU,但事实并非如此。根据我如何更改语法,它会回显17行,100行或根本没有行。
值得注意的是,两个查询都运行良好。 Oracle查询非常长,并且其中包含大量子查询,因此我不会在下面包含该完整查询。 Oracle查询在SQL Developer中完美地返回结果,MySQL查询在HeidiSQL中完美地返回结果。两个查询都经过测试并在其他php文件中作为表格回显,以确保它们正常工作。
以下是我试图修复的php文件到目前为止的内容;
<?php
$conn = oci_connect($user, $pswd, $hst);
$sql = oci_parse($conn,"[Really long Oracle Query]");
while ($row = oci_fetch_assoc($sql))
{
$sku = $row['SKU'];
$con = mysql_connect("[database host]", "[database user]", "[database password]");
mysql_select_db("[database_name]");
$sqls = "SELECT * FROM [table_name] WHERE [this_date_column] BETWEEN
DATE_SUB(NOW(), INTERVAL 14 DAY) AND NOW()";
$result = mysql_query($sqls);
$mailer = NULL;
while($rows = mysql_fetch_assoc($result))
{
$m_sku = $rows['sku'];
if ($m_sku == $sku)
{
$mailer == 'false';
}
}
if ($mailer == 'false')
{
echo $m_sku;
echo "<br>";
}
}
?>
再次; MySQL查询中只有30个SKU,但Oracle查询中有超过100个SKU。 MySQL查询中的所有SKU肯定都在Oracle查询中。
任何人都能看到我做错了什么?
提前致谢,
- 安东尼
答案 0 :(得分:1)
您有基本的sintacsis错误:
=
用于分配值
==
比较了2个变量(不是类型*)
===
比较了2个变量,包括类型。
您的代码应如下所示:
while($rows = mysql_fetch_assoc($result))
{
$m_sku = $rows['sku'];
if ($m_sku == $sku)
{
$mailer = false; // == is for comparison, = is for assign
}
}
if ($mailer === false)
{
echo $m_sku;
echo "<br>";
}
if($member == 'false'){...}
当&#39; false&#39;将==
与 falsefull 值进行比较(0,null,false,array(),&#39;&#39;)..它不会被加工,因为它是解析为&#34;非空字符串&#34;所以它不是 falsefull 。
答案 1 :(得分:0)
这是你的代码,MySQL连接移出循环并且==赋值已修复。
<?php
//Connect to databases
$oracle = oci_connect($user, $pswd, $hst);
$mysql = mysql_connect("[database host]", "[database user]", "[database password]");
mysql_select_db("[database_name]");
//Get rows from Oracle
$oracle_result = oci_parse($oracle, "[Really long Oracle Query]");
$oracle_rows = array();
while ($row = oci_fetch_assoc($oracle_result)) $oracle_rows[] = $row;
//Get rows from MySQL
$mysql_sql = "SELECT * FROM [database_name] WHERE this_date_column BETWEEN
DATE_SUB(NOW(), INTERVAL 14 DAY) AND NOW()";
$mysql_result = mysql_query($mysql_sql);
$mysql_rows = array();
while ($row = mysql_fetch_assoc($mysql_result)) $mysql_rows[] = $row;
foreach ($oracle_rows as $oracle_row) {
$oracle_sku = $oracle_row['SKU'];
foreach ($mysql_rows as $mysql_row) {
$mysql_sku = $mysql_row['sku'];
$mailer = null;
if ($mysql_sku == $oracle_sku) {
$mailer = false;
echo $mysql_sku . "<br>";
}
}
}