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?