Выбор строк из нескольких таблиц. Как? - PullRequest
0 голосов
/ 17 января 2012

Допустим, у нас есть древовидные таблицы.

Products                  Fields                Fields Value
----------------          -------------         --------------
  pid    catid             fid   catid            fid   pid   value
-------|-------|          -----|-------         ------|-----|--------
   1       1                1      1               1     1     25%
   2       1                2      1               1     2     32.5%
                            3      2               2     1     45%
                                                   2     2     42%
                                                   3     1     17.3%
                                                   3     2     21%

Обычным способом является выбор Products в одном запросе и циклический просмотр набора результатов (RS1).
Затем мы выбираем Fields для catid за каждую строку (RS2).Затем выполните то же действие с RS2 для выбора значения поля.

Единственная проблема - это проблема производительности, которая будет уменьшена из-за , выполняющего много запросов `, когда их многострок в каждой таблице.

Не могли бы вы предложить мне лучшее решение для выполнения меньше запросов ?

edit
Я хочу показать каждыйпродукт в коробке и показать поля для каждого продукта с его надлежащим значением.объединение таблиц дерева вернет дублированные значения для каждого FieldValue в Products и не будет использоваться в цикле.

Ответы [ 4 ]

2 голосов
/ 17 января 2012

Угадайте, что вам нужно, попробуйте это:

SELECT f.catid, fv.* FROM Fields f
INNER JOIN Products p 
  ON f.catid = p.catid
INNER JOIN FieldsValue fv
  ON fv.fid = f.fid AND fv.pid = p.pid
1 голос
/ 17 января 2012
SELECT * 
  FROM Products
       NATURAL JOIN Fields
       NATURAL JOIN FieldsValue;
0 голосов
/ 17 января 2012

Вы можете объединить таблицы, используя left join:

select *
from Products p
left join Fields f on f.catid = p.catid
left join `fields value` fv on fv.fid = f.fid on fv.pid = p.pid
where p.pid = 1
0 голосов
/ 17 января 2012

использовать синтаксис соединения:

SELECT * FROM Products as P
LEFT JOIN FieldsValue as FV ON FV.PID = P.PID
LEFT JOIN Fields as F on F.fid = FV.fid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...