I en applikation jag jobbar med ser tabellen tbl_categories ut så här:
catId
catName
parentCat
I denna tabell finns båda kategorier och underkategorier lagrade. En kategori har bara catId och catName ifyllt medan en underkategori även har parentCat ifylld och parentCat är id-numret (catId) för kategorin underkategorin tillhör.
Jag skulle vilja plocka ut alla kategorier och underkategorier och sortera dessa automagiskt så att tabellen dessa skrivs ut i ser ut så här:
select p.catName,c.catName
from tbl_category p
left join tbl_category c
on p.catId = c.parentCat
where p.parentCat is null
order by p.catName,c.catName
själva presentationen med indentering får du hantera i ditt skript.
Microsoft JET Database Engine (0x80004005)
Det angivna fältet 'catId' kan referera till fler än en av de tabeller som är uppräknade i SQL-uttryckets FROM-instruktion.
Denna SQL-frågam där jag lagt till c1 framför alla fält plockar enbart ut underkategorierna.
SELECT c2.catId, c2.catName, c2.parentCat FROM tbl_categories c1
LEFT JOIN tbl_categories c2 ON c1.catID = c2.parentCat
ORDER BY c1.catID, c2.catID
Vad kan nu vara problemet?
tpf
och just ja, det är gamla hederliga ms access det rör sig om..
SELECT c1.catID, c1.catName, c1.parentCat,
c2.catID as subcatid, c2.catName as subcatname, c2.parentCat as subparentcat
FROM tbl_categories c1
LEFT JOIN tbl_categories c2 ON c1.catID = c2.parentCat
ORDER BY c1.catID, c2.catID
SELECT c1.catID, c1.catName, c1.parentCat, c2.catID as subcatid, c2.catName as subcatname, c2.parentCat as subparentcat
FROM tbl_categories c1 LEFT JOIN tbl_categories c2 ON c1.catID = c2.parentCat
WHERE c1.parentCat is null ORDER BY c1.catID, c2.catID
Jag får inte sorteringen att funka riktigt. Jag vill ha det precis som söderlund skrev i första inlägget. Nu är min sortering inställd på att först ta ut huvudkategorierna och därefter underkategorierna, allt baserat på ID. Det jag vill är att allt ska komma i bokstavsordning, inte efter ID. När jag testade att sätta i bokstavsordning så fick jag både över och underkategorier i bokstavsordning, blandat. Som det ser ut nu så har jag ingen nytta av JOINen. HJÄLP
$sql = "SELECT p.c_id AS id, p.c_parent_id AS parent_id, p.c_value AS value, c.c_id, c.c_parent_id, c.c_value
FROM categories p LEFT JOIN categories c ON p.c_id = c.c_parent_id
ORDER BY [b]p.c_id, c.c_id, p.c_value, c.c_value[/b]";
$result = mysql_query($sql);
$used_id = 0;
while($row = mysql_fetch_array($result)) {
if($row['parent_id'] == NULL) {
if(!($used_id == $row['id'])) {
echo '<option value="' . $row['id'] . '">' . $row['value'] . "</option>\n";
$used_id = $row['id'];
}
} else {
echo '<option value="' . $row['id'] . '"> ' . $row['value'] . "</option>\n";
}
}
Tackar för svar!
e/
Jag får ju med dubletter för huvudkategorierna som jag filterar bort med php-koden, men kan detta göras redan i sql-frågan? Group, distinct eller nåt sånt?