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 :: Выбор значений из двумерного массива sql

 PHP.SU

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


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

> Описание: mysql_fetch_assoc
csc4
Отправлено: 05 Января, 2015 - 15:14:51
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Апр. 2014  


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




Привет всем PHP Develop'ерарам.
Работаю с пхп уже норм времени, но запоролся на самом простом.
Задача: есть таблица tbl_proq, нужно выбрать записи к которых value равны запросу.
и потом из этих полученных записей выбрать ту которая подходит, подробнее в коде.
PHP:
скопировать код в буфер обмена
  1. // Подключаем скъюельку:
  2. require_once ENGINE_DIR . '/classes/mysql.class.php';
  3. $size = 999;
  4. // Запрос:
  5. $find_inst = "SELECT * FROM `tbl_proq` WHERE catid = '".$catid."' AND perm = '".$perm."'";
  6.  
  7. // Выполняем запрос:
  8. $find_inst_q = $db->sql_q($find_inst);
  9.  
  10. // Получаем данные запроса: это работает но если у одной из записей нет места то выводит нет места.
  11. while($fb_list = mysql_fetch_assoc($find_inst_q)){
  12. if(($fb_list['totalsize'] + $size) <= $fb_list['maxsize']){$softid = $fb_list['id'];}else{echo "Нету места";}
  13.  
  14.                 };

Смысл: запрос выбирает записи где value == переменным, записей может быть сколько угодно.
Дальше нужно узнать есть ли у записей место по totalsize и maxsize, и выбрать любую одну запись где есть место, а если нет свободных записей написать нет места.
Заранее спс(Просьба не пинайте за косяки это все тестово)

(Отредактировано автором: 05 Января, 2015 - 15:19:34)

 
 Top
Wooorker
Отправлено: 06 Января, 2015 - 20:54:50
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2011  


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




Какой смысл делать танцы с бубном в массиве, когда всё это можно в запросе сделать?
Добавляете в where (totalsize + 999) <= maxsize limit 1
Если запрос вернёт вам запись - вот получите то, что надо, если записей не будет, значит "нету места".
 
 Top
csc4
Отправлено: 07 Января, 2015 - 11:37:21
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Апр. 2014  


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




Мой косяк забыл включить мозг и полистать php manual.
на тот момент поста я ещё не весь код написал, всё решено.(спс Wooorker)
Я не один такой, мало ли кому пригодится: Задача
Выбрать записи из бд где catid и perm == переменным, дальше узнать есть ли в этом списке записи == (totalsize + 999) <= maxsize, дальше взять id тех записей которые == (totalsize + 999) <= maxsize, а также посчитать на сколько процентов заняты записи по соотношению (totalsize/maxsize)*100 и поместить это всё в один массив.
Массив:
id == это ключ(id'ник записей из бд)
Значения это посчитанные проценты(на сколько % занято место totalsize от maxsize)
Дальше из этого массива выбрать максимальный % и взять его id из массива, ну как то так.(смотрите код): код бардак но это тестово.

PHP:
скопировать код в буфер обмена
  1. // Подключаем скъюельку:
  2. require_once ENGINE_DIR . '/classes/mysql.class.php';
  3. $size = 999;
  4. // Запрос:
  5. $find_inst = "SELECT * FROM `tbl_proq` WHERE catid = '".$catid."' AND perm = '".$perm."'";
  6.  
  7. // Выполняем запрос:
  8. $find_inst_q = $db->sql_q($find_inst);
  9.  
  10. $chkarr = array(); // создаем новый пустой массив
  11.                 while($fb_list = mysql_fetch_assoc($find_inst_q)){
  12.                 if(($fb_list['totalsize'] + $size) <= $fb_list['maxsize']){ // Проверяем есть ли записи  == (totalsize + 999) <= maxsize
  13.                 $chkarr[$fb_list['id']] = ($fb_list['totalsize']/$fb_list['maxsize'])*100; // узнаём на сколько % занята каждая запись и помещаем это всё в один массив.
  14.                
  15.                
  16.                 }
  17.                
  18.                 };
  19.                 if(!empty($chkarr)){ // проверяем массив на пустоту, и если не пустой получаем id максимально занятой записи.
  20. $instid = array_search(max($chkarr), $chkarr);
  21. }else{
  22. echo "Недостаточно места в данной программе";}
  23. echo $instid;


Объяснил по фасту сори за не понятки!
ВОПРОС РЕШЁН!

(Отредактировано автором: 07 Января, 2015 - 11:46:27)

 
 Top
Wooorker
Отправлено: 09 Января, 2015 - 20:24:05
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2011  


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




Ещё раз обращаю ваше внимание, что все вычисления можно сделать прямо в запросе к таблице. С учётом последних добавлений запрос будет сложнее (нужно будет сделать что-то вроде этого
SELECT t1.id, MAX(t1.procent) FROM `tbl_proq`
LEFT JOIN (SELECT id, (totalsize/maxsize) as procent FROM `tbl_proq`) t1 ON t1.id=tbl_proq.id
WHERE ...)
и дальше проверяем на количество записей.
Запрос на работоспособность не проверял, но как-то так.
 
 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