У меня есть вопрос, я надеюсь, вы можете мне помочь.
Я делаю большой оператор SELECT с использованием WHERE / IN и передавая массив $ для всех используемых вами поисковых терминов.
быстрый пример .. (хотя в конце массив $ намного больше)
$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 (index 0) не было найдено в базе данных … ничего не возвращается в $ row = mysqli_fetch_assoc ($ results loop …
ТОЛЬКО найденные числа .. и их соответствующие / связанные данные, которые были вытащены из БД с ним ..
Я бы хотел, чтобы все было так:
Или, как это было бы приемлемо (но над макетом было бы лучше):
Если первое число в массиве $ harNumArray не найдено в WHERE / IN SELECT, оно ничего не возвращает (что имеет смысл).
однако .. мне нужно «учитывать не совпадения» и вставить пробел (или что-то) .., чтобы сохранить интервал / порядок финального «списка» (текстовый файл)
Как я могу это сделать?
благодаря!
РЕДАКТИРОВАТЬ::
вот текущее состояние кода: (все равно не возвращает совпадений)
@Cal
//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>"); } }
все равно совпадение не возвращается … независимо от одинарных кавычек, кавычек или двойных кавычек.
тупик?
благодаря
ОБНОВЛЕНИЕ II:
@ кальцит
ok Я запустил код, который вы указали.
это был мой результат:
Array ([har_id] => 000100007537 [guar_num] => 0000676798) Array ([har_id] => 000100007538 [guar_num] => 0000676798) Array ([har_id] => 000100007539 [guar_num] => 0000676798) Array ([har_id] => 000100007768 [guar_num] => 0000675266) Array ([har_id] => 000100007769 [guar_num] => 0000675266)
HAR_ID в DB = varchar (12)
GUAR_NUM в DB = varchar (12)
если я оставлю OFF кавычки в запросе #results .. Я получаю возврат данных .. (но независимо от того, что .. совпадений не найдено)