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 :: Получение данных из 5 таблиц и построение правильного массива

 PHP.SU

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


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

> Без описания
dropoff
Отправлено: 08 Октября, 2012 - 00:43:32
Post Id



Посетитель


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


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




Доброго времени суток.

Ребята, тут вот человек задал вопрос про получение данных из 5 таблиц и построение вывода в определенном виде

Процитирую вопрос тут
Цитата:
Есть 5 таблиц, которые организуют некую группировку определенных групп>параметров>значений
Для наглядности разместил все на http://sqlfiddle[dot]com/#!2/c6f9c/1
На выходе нужно получать массив
Группа 1
----Параметр 1
--------Значение 1
--------Значение 2
---- Параметр 2
--------Значение 3
Группа 2
----Параметр 3
--------Значение 4
--------Значение 5
---- Параметр 4
--------Значение 6
Без группы
----Параметр 5
--------Значение 7
--------Значение 8
Значение 9 (без группы и без параметра)
Значение 10 (без группы и без параметра)

То есть группа может быть не указана вообще, а значение может быть не привязано к параметру.

Таблицы
filter_group - группы
filter_name - параметры (тут же привязывается и группа, к которой параметр может принадлежать(не обязательно))
filter_value - значения
Таблицы связей
filter_name_to_value - таблица для связи параметров и значений. Значения могут быть не привязаны, и тут их не будет
filter_param - Это окончательная связь значения и товара(новости, статьи)

Вопрос в том, как лучше организовать выборку из БД и как получить нужный массив, чтобы без проблем разбирать его в smarty.
Так же интересует как лучше расставлять индексы и т.д... Выборка идет по ID товара пока только.


У меня почти такая же структура, правда таблицы 4. Сами запросы тут http://sqlfiddle[dot]com/#!2/c6f9c/1
Может кто поможет решить задачу? Был бы признателен за помощь. А то четыре часа голову ломаю, ничего не выходит.
 
 Top
dropoff
Отправлено: 08 Октября, 2012 - 22:49:27
Post Id



Посетитель


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


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




Ребята, может есть у кого идеи? Очень надо, а сделать не получается.
 
 Top
bossound
Отправлено: 10 Октября, 2012 - 09:40:17
Post Id


Новичок


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


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




dropoff пишет:
Ребята, может есть у кого идеи? Очень надо, а сделать не получается.
идея проста строим 4 подзапроса и на основе их делаем 5 запрос и получаем себе временную таблицу с нужным нам набором полей.
вот примерно у меня так выбирается номеклатура из 5 таблиц

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2. nomenclature.tid AS tid,
  3. nomenclature.id AS id,
  4. nomenclature.name AS name,
  5. nomenclature.actual AS actual,
  6. nomenclature.date_in AS date_in,
  7. nomenclature.mark_name AS mark_name
  8. FROM(SELECT
  9. new_table.tovar_id AS tid,
  10. tovar.tovar_name AS name
  11. FROM
  12. (SELECT tovar_id FROM `subgroup_structure`
  13. WHERE subgroup_id IN (
  14. SELECT subgroup_id FROM subgroups WHERE group_id IN (SELECT group_id
  15. FROM `groups`
  16. ORDER BY `group_sort`) ORDER BY `subgroup_id`) ORDER BY `subgroup_id`)new_table
  17.  LEFT JOIN tovar USING(tovar_id))table2
  18.  LEFT JOIN nomenclature USING(tid) WHERE nomenclature.id <> 'NULL' ORDER BY tid


Думаю смысл будет понятен

(Отредактировано автором: 10 Октября, 2012 - 09:45:33)

 
 Top
dropoff
Отправлено: 31 Октября, 2012 - 08:53:47
Post Id



Посетитель


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


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




Спасибо большое!
 
 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