Я искал в Интернете и этот форум, но я до сих пор не могу найти хороший способ сделать это FAST и, особенно, без проблем с использованием памяти. Вот идет моя задача:Php PDO loop ресурс вместо fetch
То, что я сделал в традиционном MySQL:
У меня есть 3 таблицы, позволяет сказать: table1, table2 и Таблица3 Давайте предположим, что table1 имеет 300.000 строк (они закупите детали, например,) Давайте предположим, что table2 список продуктов, и имеет 10000 строк предположим, что таблица 3 представляет списки услуг, с также 10,000 строк
Теперь, что мне нужно сделать, это создать отчет с перечислением каждую покупку в цикл, который будет проверять, является ли элемент покупки для продукта или услуги, и если это продукт, он выведет название продукта ct, получив столбец соответствующего имени в таблице2. То же самое произойдет, если это услуга ...
1) В руководствах и форумах сказано, что я не могу запускать другой запрос в PDO, не заканчивая чтение всех моих строк ... что в этом случае, поскольку мне нужно запустите другой запрос, чтобы получить имя продукта/услуги. (В mysql это довольно просто, так как я могу обрабатывать множество ресурсов результата и просто перебирать между ними с помощью mysql_result)
2) Некоторые люди говорили, что использование fetchall или even fetch приведет к взрыву в моем использовании памяти, и я не смогу это сделать этот запрос .... Я уже пытался получить массив со всеми результатами (300K), и он образно взрывает использование памяти моего сервера ...
Итак, ребята, вы можете мне помочь? Я пытаюсь пошевелить серверы в Windows Azure, и они только позволяют PDO Os SQLSRV .....
Ok некоторые люди спрашивают здесь идет мой теоретический код:
// connect to mysql database
$sql = @mysql_connect("{server}","{login}","{password}");
@mysql_select_db("{database}");
// query:
$result = mysql_query("SELECT * FROM table1 ORDER BY purchase_date ASC");
for($i=0;$i<$num;$i++){
if(mysql_result($result,$i,"purchase_type")==1){
$result1 = mysql_query("SELECT product_name FROM table2 WHERE id='".mysql_result($result,$i,"purchase_type_id")."'");
$name = mysql_result($result1,0,"product_name");
}else if(mysql_result($result,$i,"purchase_type")==2){
$result1 = mysql_query("SELECT service_name FROM table3 WHERE id='".mysql_result($result,$i,"purchase_type_id")."'");
$name = mysql_result($result1,0,"service_name");
}else{
$name = '{error}';
}
echo(($i+1)". ".$name." <br/>");
}
PS: Это просто пример кода .... реальный код намного дольше и сложнее, чем это .... Но если я смогу решить теорию здесь, я могу выяснить остальное ... :)
PS2: Перед кем-то спрашивает .... таблица2 и таблица3 имеют разные столбцы ....
Thanks,
разместить свой код и запросы, это облегчит нам ответить. – michi
Опубликуйте структуру своих таблиц. Если между ними есть правильно спроектированные отношения, вы должны иметь возможность использовать 'JOIN' и получать всю необходимую информацию только в одном наборе запросов/результатов. – lafor
Объединение значений между таблицами должно выполняться в базе данных, а не в скрипте. Будет очень медленно поддерживать упаковку и отправлять запросы. Тривиально, чтобы ваш запрос делал что-то вроде: case, когда type = 'service' then service.name else product.name end as itemname – kainaw