|
Программирование PHP, Perl, HTML, XHTML, CSS, JavaScript, MySQL и другие языки кодирования. |
|
Опции темы |
Сегодня | |||||
|
22.10.2016, 19:28 | #1 | |||
Реноме:
1556
|
MySQl: существует ли запись с параметрами
Если нужно проверить существует ли запись в баз данных с определёнными параметрами делаю так:
PHP код:
Решил, что следует заменить 500 обращений к базе данных, на 500 обращений к массиву данных 1 раз выбранных из базы. Это должно значительно сократить время, как я думаю. Выбираем все данные: PHP код:
Но в базе есть соответствующие поля, а с массивами как? Помогите пожалуйста?
__________________
|
|||
23.10.2016, 13:19 | #2 | |||
Реноме:
497
|
$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)) { //ищем в массивах нужные совпадения //совершаем нужное действие } } |
|||
23.10.2016, 14:39 | #3 | |||
Реноме:
1556
|
Спасибо. Я честно говоря думал 2-3 строки будет, - ну там какие-то специальные функции PHP с многомерными массивами.
Сомневаюсь, что будет быстрее чем: PHP код:
добавлено через 10 минут Загнать в многомерный массив можно так: PHP код:
А вот как проверить переменные? Если в базе number - 3-й столбец (начиная с 1), а title 7-й столбец.
__________________
Последний раз редактировалось Port_Artur; 23.10.2016 в 14:50. Причина: Добавлено сообщение |
|||
23.10.2016, 14:50 | #4 | |||
Реноме:
497
|
Я просто привел пример для работы с массивами.
Если таблица достаточно большая (сотни тысяч записей), то запросы к таблице работают гораздо быстрее, чем перебор массивов. добавлено через 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(); Последний раз редактировалось alex8; 23.10.2016 в 15:00. Причина: Добавлено сообщение |
|||
23.10.2016, 15:00 | #5 | |||
Реноме:
1556
|
До 10 тысяч записей и размер базы 2-3 мегабайта.
__________________
|
|||
23.10.2016, 20:00 | #7 | |||
Тех. администратор
Реноме:
8718
|
Если сомневаетесь в скорости, то разделите запросы. Зачем Вам 500 запросов? Насколько регулярно это необходимо? Где оно будет запускаться? Еще вариант - сделайте кэш, т.е. некий скрипт в ненагруженное время на сервере делает выборку из БД, и работает с основной массой, в течение дня в выборку попадают новые данные, ночью, к примеру, кэш снова обновляется. |
|||
01.11.2016, 18:02 | #8 | |||
Реноме:
394
|
Port_Artur, подробнее изложите суть проблемы.
Если нужно узнать только наличие записей, подпадающих под заданный фильтр, используйте COUNT(). Тянуть из БД фактические данные, тем более по маске * не нужно
__________________
|
|||
01.11.2016, 18:39 | #9 | |||
Реноме:
1556
|
Есть XML-файл с 500-ми значениями, нужно добавить в базу несуществующие, т.е. проверить каждое на вхождение в базу.
Не берём во внимание работу с XML. Останавливаемся на цикле проверки. Нужно как можно быстрее по времени обработки, проверить по 2-м параметрам.
__________________
|
|||
01.11.2016, 19:03 | #10 | |||
Реноме:
394
|
Определите на этих двух параметрах составной первичный ключ или юник и попробуйте просто добавлять записи при помощи INSERT IGNORE порциями.
__________________
|
|||
Реклама | |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
|
|