我有一个问题希望你能帮助我。。
我正在使用 WHERE/IN 执行大型 SELECT 语句,并为要使用的所有“搜索词”传入一个 $array。
快速示例..(尽管最后 $array 更大)
$harNumArray = (0100001943,0100001944,0100002392,0100007414,0100012110,0100015761,0100015835);
$harNumArray2 = implode(',', $harNumArray);
$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2)");
//**outputting the matches values/data from the search (select)**
while ($row = mysqli_fetch_assoc($results)) {
//echo "HAR_ID: ". $row["har_id"]. "\tGUAR_NUM: " . $row["guar_num"] . "\r\n<BR>";
echo $row["har_id"]. "\t" . $row["guar_num"] . "\r\n<BR>";
fwrite($fh, $row["har_id"] . "\t" . $row["guar_num"] . "\r\n");
}
这工作得很好/很好(*感谢 msturdy 的提示)......'当'有一个匹配..如果没有匹配..没有返回。
但是.. 例如,如果在数据库中未找到 $harNumArray(索引 0)中的第一个值... $row = mysqli_fetch_assoc($results 循环中没有返回任何内容...
仅找到数字.. 以及从数据库中提取的匹配/相关数据..
我希望它仍然是这样的:
- 0100001943^- //在数据库中丢失/热门找到的数字(条目),但仍在首位使用原始搜索词)
- 0100001944^0123467894
- 0100002392^0011122234
- 0100007414^0002130567
- 0100012110^0000045432
- 0100015761^0001000045
- 0100015835^0998775233
或者这样是可以接受的(但上面的布局会更好):
- -^- //在数据库中丢失/热找到的数字(条目)
- 0100001944^0123467894
- 0100002392^0011122234
- 0100007414^0002130567
- 0100012110^0000045432
- 0100015761^0001000045
- 0100015835^0998775233
如果在 WHERE/IN SELECT 中找不到 $harNumArray 数组中的第一个数字.. 它不会返回任何内容(这是有道理的)..
但是..我“需要”考虑不匹配的问题..并插入一个空白(或其他东西)..以保持最终“列表”(文本文件)的间距/顺序
我该怎么做呢?
谢谢!
编辑::
这是代码的当前状态:(仍然不返回匹配项)
@卡尔
//stack overflow approach:
//format array data
$harNumArray2 = "'" . implode("','", $harNumArray) . "'"; //single quotes
//$harNumArray2 = implode(',', $harNumArray); //no quotes
//$harNumArray2 = '"' . implode('","', $harNumArray) . '"'; //double quotes
//print_r("ARRAY CHECK: " . $harNumArray2);
$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2) ORDER BY har_id ASC") or die(mysql_error());
//$results = mysqli_query($mysqli, "SELECT har_id, guar_num FROM placements WHERE har_id IN (" . $harNumArray2 . ") ORDER BY har_id ASC") or die(mysql_error());
echo("<BR>");
print_r("SELECT har_id, guar_num FROM placements WHERE har_id IN ($harNumArray2)");
echo("<BR>");
$rows = array();
while($row = mysqli_fetch_assoc($results)) {
$rows[$row['har_id']] = $row;
}
foreach ($harNumArray as $id){
if (isset($rows[$id])){
//... do something with $rows[$id]
print_r($rows[$id] . "<BR>");
}else{
//... no match for $id
print_r("....no match....");
echo("<BR>");
}
}
仍然没有返回匹配...无论单引号,没有引号或双引号..
难倒?
谢谢
更新二:
@卡尔-
好的,我运行了您提供的代码..
这是我的输出:
数组([har_id] => 000100007537 [guar_num] => 0000676798)数组([har_id] => 000100007538 [guar_num] => 0000676798)数组([har_id] => 000100007539 [guar_num] => 0000676)(数组) => 000100007768 [guar_num] => 0000675266)数组([har_id] => 000100007769 [guar_num] => 0000675266)
DB 中的 HAR_ID = varchar(12)
DB 中的 GUAR_NUM = varchar(12)
如果我在#results 查询中保留引号.. 我得到数据返回.. (但无论如何.. 没有找到匹配项)