上面是我的桌子。现在我想要实现的是查询类型是" 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循环中执行另一个查询。
答案 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小提琴示例
答案 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'