MASS WHERE / IN, как обрабатывать пустые / возвращенные данные также совпадают?

У меня есть вопрос, я надеюсь, вы можете мне помочь.

Я делаю большой оператор 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 …

ТОЛЬКО найденные числа .. и их соответствующие / связанные данные, которые были вытащены из БД с ним ..

Я бы хотел, чтобы все было так:

  • 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

Если первое число в массиве $ 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 .. Я получаю возврат данных .. (но независимо от того, что .. совпадений не найдено)