我有一个表vm_category,在其中我从category_id和caregory_name列中获取所有行。然后我在下拉列表中使用它来填充侧面左侧的搜索过滤器模块。
现在这样做给了我一个巨大的类别列表,我想根据类别的子类别缩小范围。这些是在另一个名为vm_category_xref的表中组织的,其中我有3列;
我想要做的是在我的查询中指定仅返回与_xref表中的特定category_parent_id匹配的category_id和名称。这是我目前的查询:
$query = "SELECT `c`.`category_name` AS `name` , `c`.`category_id` AS `id`
FROM `#__vm_category` AS `c` ORDER BY `c`.`category_id`;";
我不熟悉JOIN足以解决这个问题,但我知道它应该相当简单,任何帮助都会非常感激。谢谢!
答案 0 :(得分:1)
试试这个:
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;
答案 1 :(得分:0)
试试这个:
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_id等于_xref中的category_parent_id的记录才会返回category_name和category_id。
答案 2 :(得分:0)
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
我可能选择了错误的字段来加入,但c和x中的2个相同字段中的哪一个是您应该在连接条件中放置的字段
答案 3 :(得分:0)
select vc.category_id, vc.category_name
from vm_category vc, vm_category_xref vcx
where vc.category_id = vc.category_parent_id
答案 4 :(得分:0)
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;
将?
替换为您要匹配的ID。
答案 5 :(得分:0)
如果我理解正确,您只想为外部参照上的某些类别父ID检索category_name和category_ID。
我通常在这种情况下使用IN。
我假设vm_category中的category_id映射到vm_category_xref中的category_parent_id。
因此...
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是您想要的类别的ID。