Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Можно ли запросом выбрать все записи у которых диапазон значения поля не будет превышать 3-х

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
bkmz1984
Отправлено: 25 Июля, 2016 - 11:14:01
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2016  
Откуда: г. Сумы, Украина


Помог: 0 раз(а)




Задача такая есть таблица MySQL:



Нужно выбрать 3 блока записей в рамках одного "callid". Не три записи, а подряд все записи у которых диапазон значения "callid" не будет превышать 3-х

Такой вариант пугает:

PHP:
скопировать код в буфер обмена
  1.  
  2. $all_selected_uid = array();
  3. foreach ($data as $row) {
  4.     $all_selected_uid[] = $row['callid'];
  5. }
  6.  
  7. // Сравниваем количество полученых записей в рамках одного уникального "callid" и если нехватает добавляем недостающие
  8. foreach (array_unique($all_selected_uid) as $uid) {
  9.     $cont_uid = array();
  10.     // Получаем реальное количество записей записаных в "cdr" в рамках одного "callid"
  11.     $count_uid = mysql_query("SELECT COUNT(*) FROM cdr WHERE callid = '".$uid."'");
  12.     // Перебираем все результаты запроса исправниваем количество записей в "cdr" и в результате первой выборки данных
  13.     while ($count = mysql_fetch_row($count_uid)){
  14.         // Фильтруем массив первой выборки так чтобы там остались только записи с определенным "callid"
  15.         $rows_in_first_quiry = array_filter($data, function ($row) use ($uid) {
  16.             return ($row['callid'] == $uid);
  17.         });
  18.         // Сраыниваем количество записей в первой выборке (count($qw)) и количество записей в "cdr" ($count[0]) в рамках одного "callid"
  19.         if (count($rows_in_first_quiry) != $count[0]) {
  20.             // Если не хватате добираем все записии и дописываем в многомерный массив с результатаом первой выборки
  21.             $count_uid = mysql_query("SELECT * FROM cdr WHERE callid = '".$uid."'");
  22.             while ($row = mysql_fetch_assoc($count_uid)) {
  23.                 $data[] = $row;
  24.             }
  25.             // Отсекаем те элементы массива которые задублировались
  26.             $unique_data = array_map("unserialize", array_unique(array_map("serialize", $data)));
  27.         }
  28.     }
  29. }


Тоже самое без комментариев:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $all_selected_uid = array();
  4. foreach ($data as $row) {
  5.     $all_selected_uid[] = $row['callid'];
  6. }
  7.  
  8. foreach (array_unique($all_selected_uid) as $uid) {
  9.     $cont_uid = array();
  10.     $count_uid = mysql_query("SELECT COUNT(*) FROM cdr WHERE callid = '".$uid."'");
  11.     while ($count = mysql_fetch_row($count_uid)){
  12.         $rows_in_first_quiry = array_filter($data, function ($row) use ($uid) {
  13.             return ($row['callid'] == $uid);
  14.         });
  15.         if (count($rows_in_first_quiry) != $count[0]) {
  16.             $count_uid = mysql_query("SELECT * FROM cdr WHERE callid = '".$uid."'");
  17.             while ($row = mysql_fetch_assoc($count_uid)) {
  18.                 $data[] = $row;
  19.             }
  20.             $unique_data = array_map("unserialize", array_unique(array_map("serialize", $data)));
  21.         }
  22.     }
  23. }

(Отредактировано автором: 25 Июля, 2016 - 11:20:13)

 
My status
 Top
bkmz1984
Отправлено: 25 Июля, 2016 - 15:09:11
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2016  
Откуда: г. Сумы, Украина


Помог: 0 раз(а)




Весь верхний говнокод нужно заменить на:

PHP:
скопировать код в буфер обмена
  1.  
  2. // Выбрать все "callid"
  3. $all_selected_uid = array();
  4. foreach ($data as $row) {
  5.     $all_selected_uid[] = $row['callid'];
  6. }
  7.  
  8. $result = mysql_query("SELECT * FROM cdr WHERE callid IN (".implode(',',$all_selected_uid).")");
  9.  


Тема закрыта

(Отредактировано автором: 25 Июля, 2016 - 15:10:18)

 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB