MySQl: существует ли запись с параметрами
Если нужно проверить существует ли запись в баз данных с определёнными параметрами делаю так:
PHP код:
Решил, что следует заменить 500 обращений к базе данных, на 500 обращений к массиву данных 1 раз выбранных из базы. Это должно значительно сократить время, как я думаю. Выбираем все данные: PHP код:
Но в базе есть соответствующие поля, а с массивами как? Помогите пожалуйста? |
$sql = mysql_query("SELECT * FROM tower");
$res = $conn->query($sql); //выполняем запрос $a = array(); //пустой массив для хранения данных из таблицы $b = array(); //пустой массив для хранения данных из таблицы for ($i = 0; $i <= mysqli_num_rows($res); $i++) { //работаем со всемя записями из запроса $row = $res->fetch_assoc(); //данные из записи представляем в виде массива $row $a[$i] = $row["number"]; //сохраняем numbers в массиве $b[$i] = $row["title"]; //сохранем titles в массиве } $res->free(); //освобождаем память for ($i = 0; $i <= count($a); $i++) { //работаем со всеми данными из массива if (($a[$i] == $number) and ($b[$i] == $title)) { //ищем в массивах нужные совпадения //совершаем нужное действие } } |
Спасибо. Я честно говоря думал 2-3 строки будет, - ну там какие-то специальные функции PHP с многомерными массивами.
Сомневаюсь, что будет быстрее чем: PHP код:
добавлено через 10 минут Загнать в многомерный массив можно так: PHP код:
А вот как проверить переменные? Если в базе number - 3-й столбец (начиная с 1), а title 7-й столбец. |
Я просто привел пример для работы с массивами.
Если таблица достаточно большая (сотни тысяч записей), то запросы к таблице работают гораздо быстрее, чем перебор массивов. добавлено через 9 минут $query = "SELECT * FROM tower"; $result = $mysqli->query($query); /* numeric array */ $row = $result->fetch_array(MYSQLI_NUM); printf ("%s (%s)\n", $row[2], $row[6]); //3 и 7 столбец соответственно /* free result set */ $result->free(); |
До 10 тысяч записей и размер базы 2-3 мегабайта.
|
Цитата:
|
Цитата:
Если сомневаетесь в скорости, то разделите запросы. Зачем Вам 500 запросов? Насколько регулярно это необходимо? Где оно будет запускаться? Еще вариант - сделайте кэш, т.е. некий скрипт в ненагруженное время на сервере делает выборку из БД, и работает с основной массой, в течение дня в выборку попадают новые данные, ночью, к примеру, кэш снова обновляется. |
Port_Artur, подробнее изложите суть проблемы.
Если нужно узнать только наличие записей, подпадающих под заданный фильтр, используйте COUNT(). Тянуть из БД фактические данные, тем более по маске * не нужно ;) |
Есть XML-файл с 500-ми значениями, нужно добавить в базу несуществующие, т.е. проверить каждое на вхождение в базу.
Не берём во внимание работу с XML. Останавливаемся на цикле проверки. Нужно как можно быстрее по времени обработки, проверить по 2-м параметрам. |
Определите на этих двух параметрах составной первичный ключ или юник и попробуйте просто добавлять записи при помощи INSERT IGNORE порциями.
|
Текущее время: 21:43. Часовой пояс GMT +4. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Техническая поддержка — DevArt.PRO. Перевод: zCarot.