---
title: "sortera efter rubriker"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/15136-sortera-efter-rubriker"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "S@rpp@"
published: "2001-01-11T14:25:00.000Z"
updated: "2001-01-12T12:27:00.000Z"
replies: 6
views: 253
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/15136-sortera-efter-rubriker"
---

# sortera efter rubriker

## #1 — S@rpp@, 2001-01-11T14:25Z

Har följande problem:

På en sida presenteras alla diskussionsgrupper med rubrikerna:
Gruppnamn Antal_inlägg Datum_senaste dvs samma upplägg som på webForum.

I databasen lagras kortfattat:
Groups: g_id, g_name
Texts: t_id, g_id, inlagg, mtime,user_id

Jag hämtar ut grupper från databasen, totalt antal inlägg och datumet/tid för senaste inlägget..... 

...
$q="select g_id, g_name from groups";

$r=pg_exec($connect,$q);
$n=pg_numrows($r);
for($i=0;$i\<$n;$i++)
{
	$gid=pg_result($r,$i,0);
	$name=pg_result($r,$i,1);

	echo "\<tr\>\<td\>$name:\</td\>";
	$q2="select count(inlagg),max(mtime) from texts where g_id=$gid";
	echo "\<td\>";
	$r2=pg_exec($connect,$q2);
	echo pg_result($r2,0,0);
	echo "\</td\>";
	echo "\<td\>";
	echo substr(pg_result($r2,0,1),0,16);
	echo "\</td\>\</tr\>\\n";
}
....

Nu vill jag att genom att klicka på ex. "Gruppnamn"-rubriken ska grupperna sorteras i bokstavsordning, klickar man på "Antal inlägg"-rubriken ska den grupp som har flest inlägg vara högst upp....alltså borde jag slå ihop ovanstående SQL-sats till en enda och använda ORDER BY....

$q="select groups.g_id,groups.name count(inlagg) as antal, max(mtime) as tid from texts, groups where groups.gid=texts.gid group by groups.gid, groups.name order by groups.name asc";

...men nu kommer ju inte grupper som inte har några inlägg med!!!!! Och jag vill visa gruppnamnet även fast det ännu inte skrivits in några inlägg!!!

Hur ska jag bära jag mig åt??

Permalänk: https://www.webforum.nu/p/15136

## #2 — nanne, 2001-01-11T15:23Z

Frågan borde väl ställas i mySQL forumet?

Permalänk: https://www.webforum.nu/p/316612

## #3 — LarsG, 2001-01-11T15:24Z

Man kan använda en outer join:

```
select groups.g_id,groups.g_name, count(inlagg) as antal,
max(mtime) as tid from texts right outer join groups on        
groups.g_id = texts.g_id
group by groups.g_id, groups.g_name order by groups.g_name asc
```

En right outer join tar alla rader från den högra tabellen. Om det inte finns någon match i den vänstra tabellen så får man en rad där dessa kolmner är null annars blir det som en vanlig join.

(Jag ändrade kolumnnamnen så att de blev samma som du skrev i inledningen)

Permalänk: https://www.webforum.nu/p/316613

## #4 — S@rpp@, 2001-01-12T07:44Z

Jag får följande varing:
Warning: PostgreSQL query failed: ERROR: OUTER JOIN is not yet supported in /usr/local/www/data/site/test.phtml on line 14

Rad 14 är:$res=pg_exec($connect,$sqls);

Permalänk: https://www.webforum.nu/p/316614

## #5 — LarsG, 2001-01-12T09:13Z

Jag har aldrig använt Postgres så jag har ingen koll på vad dom kan i avseende på SQL.

Det här är en alternativ formulering, men den kanske inte fungerar heller.

```
select groups.g_id,groups.g_name,
(select count(inlagg) as antal,
max(mtime) as tid from texts where groups.g_id = texts.g_id) from groups
order by groups.g_name asc
```

Permalänk: https://www.webforum.nu/p/316615

## #6 — S@rpp@, 2001-01-12T11:06Z

nja....jag får nog ge upp med att försöka få med all information i en enda sqlsats. Det kanske går med ngt i stil med:
1\. Först hämta alla grupper lägga in det i en array.
2\. för varje gruppid hämta antalet inlägg och senast inlagda och lägga in det i arrayen.
3\. Använda ngn av sorteringsfunktionerna för array som finns....????

Permalänk: https://www.webforum.nu/p/316616

## #7 — LarsG, 2001-01-12T12:27Z

Okej, ett förslag till. Man kan använda en union

```
select groups.g_id,g_name, count(inlagg) as antal,
max(mtime) as tid from texts,groups
where 
groups.g_id = texts.g_id
group by groups.g_id, groups.g_name
union
select g_id,g_name,0,null
from groups g
where not exists (select * from texts where g_id = g.g_id)
order by g_name asc
```

Den första delen tar fram de grupper som har inlägg och den andra tar fram de som inte har inlägg.
Det är möjligt att Postgres inte godkänner att man har null med i select-listan, i så fall fär man väl slänga in något datum där och maska bort det sedan.

Permalänk: https://www.webforum.nu/p/316617

---

Tråden på webben: https://www.webforum.nu/amne/php/15136-sortera-efter-rubriker
