db: PostgreSQL / SQL Daten anders aufbereitet zurückbekommen

Hallo.

Ich habe ein Nested Set mit Kategorien in einer Tabelle im Schema "mainproject":

categoryid, lft, rgt, level, categoryname

1,1,8,1,"Oberkategorie"
2,2,3,2,"OK Unterkategorie 1"
3,4,7,2,"Unterkategorie 2"
4,5,6,3,"OK Unterkategorie 2.1"

Ich möchte nun das man nach Kategoriensuchen kann und diese automatisch vorgeschlagen werden sobald ein Buchstabe hinzukommt. So das klappt auch alles Spitze nur meine SQL abfrage macht mir später Probleme.

So angenommen ich gebe "ok" ein. Dann sorgt diese Abfrage

  
SELECT p.categoryname, p.categoryid AS ownid, o.categoryid AS oldid  
FROM mainproject.board_category n, mainproject.board_category p  
LEFT JOIN mainproject.board_category AS o ON o.categoryname ILIKE '".db::escape($tag)."%'  
WHERE n.lft  
BETWEEN p.lft AND p.rgt AND n.categoryid=o.categoryid  
ORDER BY oldid, p.lft  
LIMIT 20

1,1,8,1,"Oberkategorie"
2,2,3,2,"OK Unterkategorie 1"
3,4,7,2,"Unterkategorie 2"
4,5,6,3,"OK Unterkategorie 2.1"
dafür, das ich dieses Ergebnis zurückbekomme:
array(4){
[0]{
     categoryname="Oberkategorie", ownid = 1, oldid=3
   }
[1]{
     categoryname="Unterkategorie 2", ownid = 3, oldid=3
   }
[2]{
     categoryname="OK Unterkategorie 2.1", ownid = 4, oldid=3
   }
[3]{
     categoryname="OK Unterkategorie 1", ownid = 2, oldid=2
   }
}

Ich hätte die Ergebnissse gerne anders, Gebündelt nach "oldid".
So das es praktisch so aussieht:
array(2){
[0]array(3)(
[0]{
     categoryname="Oberkategorie", ownid = 1, oldid=3
   }
[1]{
     categoryname="Unterkategorie 2", ownid = 3, oldid=3
   }
[2]{
     categoryname="OK Unterkategorie 2.1", ownid = 4, oldid=3
   }
}
[1]array(1){
[0]{
categoryname="OK Unterkategorie 1", ownid = 2, oldid=2
   }
}

Wie ist das zu erreichen?

Gruß, DB

  1. Hi!

    Ich hätte die Ergebnissse gerne anders, Gebündelt nach "oldid".
    Wie ist das zu erreichen?

    Ein DBMS gibt _eine_ Ergebnismenge pro Query zurück. Wenn du mehrere Teilmengen haben möchtest, musst du das selbst auseinandersortieren. Dazu kannst du durch die Ergebnismenge laufen und die einen in das eine Töpfchen und die anderen in ein anderes und so weiter.

    Lo!