Проверьте, существует ли запись в массиве, используя PDO и Mysql

Я пытаюсь получить запись в моем MySQL, существует ли запись в массиве или нет. Я искал в Интернете об использовании функции array_key_exists, и, к сожалению, она всегда дает мне «Match not found», даже если запись существует в массиве.

Это мой вывод.

Array ( [0] => Array ( [0] => Array ( [GUESTCHECK] => 10017 [0] => 10017 ) [1] => Array ( [GUESTCHECK] => 10024 [0] => 10024 ) [2] => Array ( [GUESTCHECK] => 10066 [0] => 10066 ) [3] => Array ( [GUESTCHECK] => 10084 [0] => 10084 ) [4] => Array ( [GUESTCHECK] => 10150 [0] => 10150 ) [5] => Array ( [GUESTCHECK] => 10154 [0] => 10154 ) [6] => Array ( [GUESTCHECK] => 10223 [0] => 10223 ) [7] => Array ( [GUESTCHECK] => 10224 [0] => 10224 ) [8] => Array ( [GUESTCHECK] => 10225 [0] => 10225 ) [9] => Array ( [GUESTCHECK] => 10261 [0] => 10261 ) [10] => Array ( [GUESTCHECK] => 10284 [0] => 10284 ) [11] => Array ( [GUESTCHECK] => 10298 [0] => 10298 ) [12] => Array ( [GUESTCHECK] => 20012 [0] => 20012 ) [13] => Array ( [GUESTCHECK] => 20014 [0] => 20014 ) [14] => Array ( [GUESTCHECK] => 20054 [0] => 20054 ) [15] => Array ( [GUESTCHECK] => 20056 [0] => 20056 ) [16] => Array ( [GUESTCHECK] => 20061 [0] => 20061 ) [17] => Array ( [GUESTCHECK] => 20131 [0] => 20131 ) [18] => Array ( [GUESTCHECK] => 20160 [0] => 20160 ) [19] => Array ( [GUESTCHECK] => 20163 [0] => 20163 ) [20] => Array ( [GUESTCHECK] => 20183 [0] => 20183 ) ) )

Помогите мне рассказать, что не так с моим кодом?

  $gchecksummary = "SELECT DISTINCT GUESTCHECK FROM `items`
where CODE = 771012 and DATE = '1/1/2018' or CODE = 771013
and DATE = '1/1/2018' or CODE = 782012
and DATE = '1/1/2018' or CODE = 774012
and DATE = '1/1/2018' or CODE = 775203
and DATE = '1/1/2018' or CODE = 775202 and DATE = '1/1/2018'";
$execgchecksummary  = $conn->prepare($gchecksummary);
$execgchecksummary->execute();


while($fetchgchecksummary = $execgchecksummary->fetchAll()){

$results[] = $fetchgchecksummary;

}


print_r($results);
echo "<br />";

if (array_key_exists("10017", $results))
{
echo "Match found";
}
else
{
echo "Match not found";
}

0

Решение

Проблема в логике вашего кода и sql запросе.

Зачем брать массив ненужных строк и делать поиск в нем?

Тоже повторяешь DATE условие с одним и тем же значением несколько раз

Вы можете просто определить условие для GUESTCHECK внутри вашего запроса, затем проверьте количество результатов и сделайте fetchAll (если есть потребность в данных).

Пример с данными строк:

  $query = "SELECT *
FROM `items`
WHERE
GUESTCHECK = 10017
AND
CODE IN (771012, 782012, 774012, 775203, 775202)
AND
DATE = '1/1/2018'
";

$statement = $conn->prepare($query);
$statement->execute();

if ($statement->rowCount() > 0)
{
echo "Match found";

$items = $statement->fetchAll();
var_dump($items);
}
else
{
echo "Match not found";
}

Пример без получения строк из БД:

  $query = "SELECT 1
FROM `items`
WHERE
GUESTCHECK = 10017
AND
CODE IN (771012, 782012, 774012, 775203, 775202)
AND
DATE = '1/1/2018'
LIMIT 1
";

$statement = $conn->prepare($query);
$statement->execute();

if ($statement->rowCount() > 0)
{
echo "Match found";
}
else
{
echo "Match not found";
}

постскриптум убедитесь, что вы добавили индекс в GUESTCHECK а также CODE поля, чтобы помочь движку БД эффективно искать данные.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector