|
|
|
| Всем привет. Не пойму одного, почему после выборки с последующей проверкой на существование файла возвращает неверное количество полей?
Метод у меня такой:
- делаем выборку рандомно
$sql = "
SELECT a.`em_".$part."_name`,
a.`em_".$part."_url`,
a.`em_".$part."_image_sm`,
a.`em_".$part."_price_ua`,
a.`em_".$part."_price_us`,
a.`em_".$part."_price_eu`
".($type != 'thiscompany' ? ', b.`em_company_profile_url`' : '')."
FROM `em_".$part."` a
".($type != 'thiscompany' ? "JOIN `em_company` b ON (b.`em_company_id` = a.`em_company_id` AND b.`em_company_access` = 'y' AND b.`em_company_deleted` = 'n')" : '')."
WHERE ".($type == 'thiscompany' ? 'a.`em_company_id` = '.$company_id : 'a.`em_company_id` != '.$company_id)."
AND a.`em_".$part."_".($part == 'action' ? 'subcategory' : 'group')."` = ".$pp_group."
".($type == 'thiscompany' ? 'AND a.`em_'.$part.'_id` != '.$pp_id : '')."
AND a.`em_".$part."_image_sm` != ''
AND a.`em_".$part."_access` = 'y'
AND a.`em_".$part."_deleted` = 'n'
ORDER BY RAND()
LIMIT ".$limit."
";
$outres = select_query($sql);
|
Всего записей 400 с лишним, те что с картинками на сервере 118...лимит у меня на 100, т.е. мне выбрать должно 100 записей, что и происходит - на этом этапе все окей
- делаю проверку на существование файлов в каталоге сайта
if($outres['count'] != 0){
$m=0;
for($l=0;$l<$outres['count'];$l++){
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$outres['result']['em_'.$part.'_image_sm'][$l])){
$m++;
foreach ($outres['result'] as $key => $val){
$res['result'][$key][] = $val[$l];
}
}
}
$res['count'] = $m;
}
|
Тут же получается, имеем разное количество записей на выходе...Хз почему. Если убрать ф-цию проверки на существование файлов, результат верен или же если убрать в запросе выборку случайных записей и оставить проверку на существование, то все окей. Единственное на что я бы грешил это кол. файлов в папке, где файлы лежат, их примерно 10 тищ. ((( Получается, что скрипт не успевает все проверить из-за большого кол. файлов в папке...
Прошу помощи. | |
|
|
|
|
|
|
|
для: TetRiska
(12.05.2011 в 12:46)
| | >Получается, что скрипт не успевает все проверить из-за большого кол. файлов в папке...
1. А он сообщает о то, что закончилось время, отведенное скрипту на проверку?
2. Какова структура массива $outres? | |
|
|
|
|
|
|
|
для: cheops
(12.05.2011 в 12:53)
| | 1. нет ничего не сообщает, просто возвращает результат каждый раз по разному
2. привожу с ограничением в 1, а то сотня многовато данных будет :)
Array (
[count] => 1
[result] => Array (
[em_produce_name] => Array (
[0] => Шлем с козырьком )
[em_produce_url] => Array (
[0] => )
[em_produce_image_sm] => Array (
[0] => files/companies/produces/s_8ff66a2e0efc467ca2d33a3274d23cc6.jpg )
[em_produce_price_ua] => Array (
[0] => 456546.00 )
[em_produce_price_us] => Array (
[0] => 0.00 )
[em_produce_price_eu] => Array (
[0] => 0.00 ) ) )
|
Самое главное, что запрос возвращает мне нужно количество. | |
|
|
|
|
|
|
|
для: TetRiska
(12.05.2011 в 13:01)
| | А зачем вам в запросе ORDER BY RAND()? Если его убрать, что происходит? | |
|
|
|
|
|
|
|
для: cheops
(12.05.2011 в 13:06)
| | мне нужно в произвольном порядке выбрать данные, если его убрать, то выводит 100 записей как и надо с верной проверкой на существование файлов | |
|
|
|
|
|
|
|
для: TetRiska
(12.05.2011 в 13:10)
| | есть ли решение проблемы? | |
|
|
|
|
|
|
|
для: TetRiska
(12.05.2011 в 15:42)
| | а функция select_query() как работает? возможно ключи массива там не по порядку формируются поэтому и в цикле не все обрабатывается... | |
|
|
|
|
|
|
|
для: Lotanaen
(12.05.2011 в 16:51)
| |
function select_query($sql){
$out = array('count' => 0, 'result' => '');
$res = mysql_query($sql);
$out['count'] = mysql_num_rows($res);
if ($out['count'] != 0){
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)){
foreach ($row as $key => $val){
if(!isset($out['result'][$key])){
$out['result'][$key] = array();
}
$out['result'][$key][] = iconv("windows-1251","utf-8",$val);
}
}
}
return $out;
}
|
| |
|
|
|
|
|
|
|
для: TetRiska
(12.05.2011 в 17:38)
| | а если так попробовать:
function select_query($sql){
$out = array('count' => 0, 'result' => '');
$res = mysql_query($sql);
$out['count'] = mysql_num_rows($res);
if ($out['count'] != 0){
$i=0;
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)){
foreach ($row as $key => $val){
if(!isset($out['result'][$key])){
$out['result'][$key] = array();
}
$out['result'][$key][$i] = iconv("windows-1251","utf-8",$val);
}
$i++;
}
}
return $out;
}
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(12.05.2011 в 17:59)
| | без изменений... | |
|
|
|
|
|
|
|
для: TetRiska
(12.05.2011 в 12:46)
| | попробуйте так:
if($outres['count'] != 0){
$m=0;
$mm=0;
for($l=0;$l<$outres['count'];$l++){
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$outres['result']['em_'.$part.'_image_sm'][$l])){
$m++;
foreach ($outres['result'] as $key => $val){
$res['result'][$key][] = $val[$l];
}
}
else{
$mm++;
foreach ($outres['result'] as $key => $val){
$res2['result'][$key][] = $val[$l];
}
}
}
$res['count'] = $m;
$res2['count'] = $mm;
}
|
и посмотрите что будет в массиве $res2 | |
|
|
|