SQL Join вопрос - PullRequest
       0

SQL Join вопрос

1 голос
/ 09 сентября 2011

У меня есть таблица vm_category, в которой я выбираю все строки из столбцов category_id и caregory_name.Затем я использую это в раскрывающемся списке, чтобы заполнить модуль поискового фильтра с левой стороны.

Теперь это дает мне гигантский список категорий, и я хотел бы сузить егопо подкатегории категории.Они организованы в другую таблицу с именем vm_category_xref, в которой у меня есть 3 столбца:

  • category_parent_id
  • category_child_id
  • category_list

Что яМне бы хотелось указать в моем запросе только возвращать category_id и имена, которые соответствуют определенному category_parent_id в таблице _xref.Вот мой текущий запрос:

$query = "SELECT `c`.`category_name` AS `name` , `c`.`category_id` AS `id`
          FROM `#__vm_category` AS `c` ORDER BY `c`.`category_id`;";

Я недостаточно знаком с JOIN, чтобы понять это, но я знаю, что это должно быть довольно просто, и любая помощь будет высоко оценена.Спасибо!

Ответы [ 6 ]

1 голос
/ 09 сентября 2011

Попробуйте это:

SELECT 
    c.category_name AS name, 
    c.category_id AS id
FROM #__vm_category AS c 
    INNER JOIN vm_category_xref xr
    ON xr.category_child_id = c.category_id
WHERE xr.category_parent_id = 5 /* the parent_id you want to filter on */
ORDER BY c.category_id;
0 голосов
/ 09 сентября 2011

Если я правильно вас понимаю, вы хотите получить category_name и category_ID только для определенных родительских идентификаторов категории на внешней ссылке.

Обычно я использую IN для подобных ситуаций.

Я предполагаю, что category_id в vm_category отображается на category_parent_id в vm_category_xref.

Итак ...

SELECT CATEGORY_NAME, CATEGORY_ID 
FROM VM_CATEGORY
WHERE CATEGORY_ID IN
(SELECT CATEGORY_PARENT_ID FROM VM_CATEGORY_XREF
WHERE CATEGORY_PARENT_ID IN ('XXX', 'YYY', 'ZZZ')) 

XXX, YYY, ZZZ - идентификаторы для категорий, которые вы хотите.

0 голосов
/ 09 сентября 2011
SELECT 
 c.category_name AS name 
,c.category_id AS id 
FROM 
vm_category AS c 
join vm_category_xref vcx 
    on c.category_id = vcx.category_parent_id
where vcx.category_parent_id = ? 
ORDER BY c.category_id;

Замените ? идентификатором, который вы хотите сопоставить.

0 голосов
/ 09 сентября 2011
select vc.category_id, vc.category_name 
from vm_category vc, vm_category_xref vcx
where vc.category_id = vc.category_parent_id
0 голосов
/ 09 сентября 2011
SELECT c.category_name AS name , c.category_id AS id
FROM vm_category c 
INNER JOIN vm_category_xref x on c.category_id = x.category_child_id
ORDER BY c.category_id

Возможно, я выбрал не те поля, чтобы присоединиться к ним, но какие бы два поля в с не были, и те, которые вы должны поместить в условие соединения

0 голосов
/ 09 сентября 2011

Попробуйте это:

SELECT c.category_name as name, c.category_id as id
FROM vm_category as c
INNER JOIN vm_category_xref as x ON
    x.category_parent_id = c.category_id
ORDER BY c.category_id

По сути, это возвращает category_name и category_id только для записей, которые имеют category_id, равный category_parent_id в _xref.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...