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 :: Свести две функции в один запрос

 PHP.SU

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


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

> Без описания
Lolya
Отправлено: 19 Мая, 2018 - 12:42:34
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


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




Возможно свести две функции в один запрос? Выборка у них одинаковая идет, но для разных таблиц.

PHP:
скопировать код в буфер обмена
  1. function genrelist() {
  2.     $ret = array();
  3.     $res = sql_query('SELECT id, name, image FROM categories ORDER BY sort ASC');
  4.     while ($row = mysql_fetch_array($res))
  5.         $ret[] = $row;
  6.     return $ret;
  7. }
  8.  
  9. function incatlist() {
  10.     $rek = array();
  11.     $res = sql_query('SELECT id, name, image FROM incategories ORDER BY sort ASC');
  12.     while ($row = mysql_fetch_array($res))
  13.         $rek[] = $row;
  14.     return $rek;
  15. }


Два запроса сильно напрягают, хотелось бы избавиться от них, тем более что таких еще будет 4 одинаковых но с другим названием функции (вид останется тот-же).

Возможно ли объединение? Растерялся
 
 Top
Строитель Модератор
Отправлено: 20 Мая, 2018 - 11:12:19
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Lolya, у вас ведь по сути меняется только название таблицы, из которой идёт выборка? Тогда можно описать всего одну функцию, добавив в сигнатуру один аргумент - в этот аргумент будет передаваться текущее название таблицы. В результате на выходе вы получите массив значений выборки из нескольких таблиц. Пример:
Спойлер (Отобразить)

(Добавление)
Lolya пишет:
таких еще будет 4 одинаковых
Добавьте остальные названия таблиц в массив с названиями таблиц.
 
 Top
Lolya
Отправлено: 21 Мая, 2018 - 20:15:19
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


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




Строитель пишет:
Lolya, у вас ведь по сути меняется только название таблицы, из которой идёт выборка? Тогда можно описать всего одну функцию, добавив в сигнатуру один аргумент - в этот аргумент будет передаваться текущее название таблицы. В результате на выходе вы получите массив значений выборки из нескольких таблиц. Пример:
Спойлер (Отобразить)

(Добавление)
Lolya пишет:
таких еще будет 4 одинаковых
Добавьте остальные названия таблиц в массив с названиями таблиц.


Спасибо. А теперь вопрос дополнительный:

как теперь расписывать функции для запроса? Растерялся
 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2018 - 20:41:39
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Lolya пишет:
как теперь расписывать функции для запроса?
Если запросы к БД одинаковые (как выше было написано), то ничего больше расписывать не нужно. Всё что надо сделать, это заполнить массив $table_names названиями таблиц, из которых будет выборка, по такому принципу:
PHP:
скопировать код в буфер обмена
  1. // Массив с названиями таблиц
  2. $table_names = ['categories', 'incategories'/*и т.д. через запятую*/];
 
 Top
Lolya
Отправлено: 21 Мая, 2018 - 21:09:34
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


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




Строитель пишет:
Lolya пишет:
как теперь расписывать функции для запроса?
Если запросы к БД одинаковые (как выше было написано), то ничего больше расписывать не нужно. Всё что надо сделать, это заполнить массив $table_names названиями таблиц, из которых будет выборка, по такому принципу:
PHP:
скопировать код в буфер обмена
  1. // Массив с названиями таблиц
  2. $table_names = ['categories', 'incategories'/*и т.д. через запятую*/];


Вот что пишет когда заменил на выше код:
Цитата:
syntax error, unexpected '[' in


 
 Top
Строитель Модератор
Отправлено: 21 Мая, 2018 - 22:00:19
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Lolya пишет:
syntax error, unexpected '['
Поднимите версию вашего PHP хотя бы до версии 5.4

Ну или заменяйте сокращённые объявления массивов $result = []; на $result = array();

А так же замените это $table_names = ['categories', 'incategories']; на этот вариант $table_names = array('categories', 'incategories');
 
 Top
Lolya
Отправлено: 21 Мая, 2018 - 22:35:44
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


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




Строитель пишет:
$table_names = array(


Большое спасибо. Работает в таком виде (полный код):
PHP:
скопировать код в буфер обмена
  1. $table = array('categories', 'incategories');
  2. function get_list($table) {
  3.     $result = array();
  4.     $res = sql_query("SELECT id, name, image FROM $table ORDER BY sort ASC");
  5.     while ($row = mysql_fetch_array($res))
  6.                 $ret[] = $row;
  7.         return $ret;
  8. }


Вывод на сранице взял так:
PHP:
скопировать код в буфер обмена
  1. $cats = get_list(categories);
  2. $incats = get_list(incategories);


Скорость *вроде как быстрее стала, но один черт запросов два на страницу как и было. Огорчение

Мне надо вывести картинки с названием и id категории и подкатегории на странице, так что если одну уберу (какую-то), то будет бить ошибку и ругаться на нехватающую функцию.
Проблема...
 
 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