SQL加入问题

时间:2011-09-09 17:17:47

标签: php sql join

我有一个表vm_category,在其中我从category_id和caregory_name列中获取所有行。然后我在下拉列表中使用它来填充侧面左侧的搜索过滤器模块。

现在这样做给了我一个巨大的类别列表,我想根据类别的子类别缩小范围。这些是在另一个名为vm_category_xref的表中组织的,其中我有3列;

  • category_parent_id
  • category_child_id
  • category_list

我想要做的是在我的查询中指定仅返回与_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足以解决这个问题,但我知道它应该相当简单,任何帮助都会非常感激。谢谢!

6 个答案:

答案 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。