MySQL查询行基于当前行

时间:2016-01-11 10:37:14

标签: mysql sql pdo

Table of Categories

上面是我的桌子。现在我想要实现的是查询类型是" main"包括所有" sub"其中parent等于当前行的id。我怎样才能做到这一点?任何帮助将不胜感激!

以下是我目前的代码:

$conn = new PDO("mysql:host=$host;dbname=$db_name",$user,$pass) or die("DB Connection failed!!");
$stmt = $conn->prepare('SELECT * FROM tbl_categories WHERE type="main"');
$stmt->execute();
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
//first loop i should get Electronics, Laptops, Mobile Phones
//second loop i should get Fashion, Men, Women
}

我不想在while循环中执行另一个查询。

2 个答案:

答案 0 :(得分:0)

您的问题不是很明确,但这是您在数据库级别的方法。

select * from tbl_categories 
where parent in
(
    select id from tbl_categories
    where type='main'
)

如果您只想获取Fashion的详细信息,请使用此

select * from tbl_categories 
where parent in
(
    select id from tbl_categories
    where type='main'
    and Category='Fashion'
)

SQL小提琴示例

http://sqlfiddle.com/#!9/ea58e/2

答案 1 :(得分:0)

我认为您的数据存在错误:为什么parent的{​​{1}}?我认为它是fashion = 1,与null相同。考虑到这一点,试试这个:

Electronics

结果:

DECLARE @T TABLE (id INT, category VARCHAR(255), Type VARCHAR(50), Parent int)
;

INSERT @T
        ( id, category, Type, Parent )
VALUES  ( 1, 'Electronics', 'Main', NULL)
,       ( 2, 'Laptops', 'Sub', 1)
,       ( 3, 'Mobile phones', 'Sub', 1)
,       ( 4, 'Fashion', 'Main', NULL)
,       ( 5, 'Men', 'Sub', 4)
,       ( 6, 'Women', 'Sub', 4)

SELECT      T2.*
FROM        @T AS T
INNER JOIN  @T AS T2
        ON  T2.Parent = T.id
WHERE       T.Type = 'Main'