我有两个查询的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 查询中。
有人看到我做错了什么吗?
提前感谢,
-安东尼
你有基本的 sintacsis 错误:
=
用于分配值
==
比较 2 个变量(不在那里存在类型 *)
===
比较 2 个变量,包括 there 类型。
您的代码应如下所示:
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'){...}
当"false"与==
与falsefull值(0,null,false,array(),"')进行比较时,它不会被压缩,因为它被解析为"非空字符串",因此它不是假的。
这是您的代码,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>";
}
}
}