PHP следующая строка MySQL – как переместить указатель, пока функция не проверит истинность?
Вопрос
У меня есть PHP-скрипт, который берет значение из строки в моей базе данных MySQL, запускает его через функцию, и если он определяет, что это правда, возвращает одно значение, а если оно ложно, ему нужно перейти к следующему значению в базе данных и проверяйте это, пока в конечном итоге не вернетесь true.Я думаю, мне нужно использовать mysql_fetch_assoc, но я не совсем уверен, как его использовать...Мне бы хотелось опубликовать свой код более конкретно, но его много, и большая его часть не имеет никакого отношения к этой проблеме...
Нет правильного решения
Другие советы
Можно ли вместо этого использовать «функцию» в базе данных?Действительно неэффективно обрабатывать каждую строку таблицы для проверки наличия какого-либо типа условия.Это именно то, в чем хороши базы данных, а именно: эффективная обработка запросов и быстрое получение ответов.
Поэтому я бы рекомендовал посмотреть, как сделать все это на стороне базы данных, чтобы ваш PHP-код просто получал конечный результат (т. е.строки, отфильтрованные функцией).Возможно, если вы предоставите более подробную информацию о том, что делает ваша «функция», можно будет дать более конкретный ответ.
Вы можете использовать mysql_fetch_array и просто переходить к значениям, полученным с помощью $row[id], а не $row['name'].Предположим, ваша функция возвращает true, вам просто нужно использовать $row[lastid+1].
Если идентификатор не является инкрементальным, это может сработать:
$qry_result = mysql_query($qry) or die(mysql_error());
while ($row = mysql_fetch_array($qry_result)) {
$result = yourfunction($row['whatever');
if ($result != false)
break;
}
Также существует функция PHP next(), которая перемещает указатель на следующий элемент массива.В вашей функции вы можете реализовать построитель массива, а затем с его помощью переключаться между элементами.Зависит от того, что на самом деле делает ваша функция или от цели сценария.Если результатов много, это может привести к некоторой нагрузке.
- Не следует проверять базу данных таким способом, как упоминалось выше.База данных немного отличается от обычного текстового файла.
- В вашей базе данных не должно быть поля, содержащего набор значений, разделенных значением1:значение2|значение1:значение2|значение1:значение2.Это должны быть отдельные поля.База данных немного отличается от обычного текстового файла, и вам лучше это изучить.
Вы можете попробовать что-то вроде этого:
SELECT *
FROM table
WHERE field NOT LIKE '%$sessionvar:%';
Я думаю, это то, чего вы добиваетесь?