#javascript #php #jquery #mysql #sql
#javascript #php #jquery #mysql #sql
Вопрос:
Gus,
У меня есть код, который в основном копирует кучу записей в одну БД и копирует ее в другую. Мне нужно сделать это для многих записей, поэтому я создал массив с переменными, которые каждый раз изменяют запрос. Вот структура моего массива:
$array = [
["Brent_Chart_1", $List_Brent_Chart_1],
["Brent_Chart_2", $List_Brent_Chart_2],
["Brent_Chart_3", $List_Brent_Chart_3],
et..... ]
И вот цикл, который проходит через массив и выполняет SQL-запросы:
foreach ($array as list($a, $b)) {
$queryx = "
UPDATE `meetings_ss`
SET `".$a."`= (
SELECT `Data`
FROM `charts`
WHERE `ID` = ".$b."
)
ORDER BY `ID` DESC LIMIT 1;";
mysql_query($queryx);
}
Проблема заключается в следующем: по какой-то причине первые девять записей копируются, как и ожидалось, а затем ничего не копируется из десятой. Я знаю, что нет проблем с именами переменных и т. Д., Как будто я начинаю цикл с десятой записи, я получаю ту же проблему: первые девять копируются, но затем происходит сбой на десятой.
Это наводит меня на мысль, что это проблема с памятью, или, возможно, это неправильный способ обработки нескольких SQL-запросов? Кто-нибудь может предложить причину, по которой это не удается?
Большое вам спасибо за ваше время.
Комментарии:
1. Сколько строк в вашем $array?
2. Здравствуйте, спасибо за ваше сообщение. Имеется 77 строк.
3. Ваш порядок и ограничение отсутствуют, если подзапрос..
4. Вы пытались распечатать результирующий запрос, а затем запустить его вручную с помощью sql-клиента?
5. Да — кроме того, ошибка повторяется, когда я начинаю с девятого значения. Запрос всегда завершается с ошибкой на девятой итерации, независимо от того, с чего я начинаю. Это проблема с памятью? Нужно ли мне освобождать какую-то память??
Ответ №1:
Ваш order by и limit отсутствуют в подзапросе .. предложение update не может иметь «order» или «limit» 🙂
Попробуйте изменить свой код следующим образом:
foreach ($array as $row) {
$queryx = 'UPDATE meetings_ss SET
' . $row[0] . ' = (SELECT Data FROM charts
WHERE ID = ' . $row[1] . ' ORDER BY ID DESC LIMIT 1)';
mysql_query($queryx);
}
Комментарии:
1. Привет, Харди, я внедрил ваше изменение, и повторяется точно такая же проблема. Он завершается с ошибкой после девятого запроса и больше не копирует записи, как ожидалось.
2. Хорошо, вам на самом деле даже не нужен этот порядок или ОГРАНИЧЕНИЕ.. Я на 100% уверен, что ваша проблема вызвана вашими данными. Включите ведение журнала ошибок PHP и просмотр и проверьте ошибку .. или отладьте все сгенерированные предложения SQL перед их выполнением.
3. Харди, есть ли ограничение на количество циклов, которые вы можете выполнять с SQL-запросами? Я не думаю, что с данными что-то не так, как упоминалось, я тестировал это из разных строк в массиве, и это всегда завершается с ошибкой после девятой… Я в тупике:-(
Ответ №2:
С кодом проблем нет. Проблема связана со структурой БД и последовательными SQL-запросами, которые в конечном итоге нарушают размер строки:
#1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.