---
title: "COUNT( * ) från annan tabell"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/122149-count-från-annan-tabell"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "erciz"
published: "2005-02-10T12:37:23.000Z"
updated: "2005-02-12T16:26:31.000Z"
replies: 18
views: 510
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/databaser-sql/122149-count-från-annan-tabell"
---

# COUNT( * ) från annan tabell

## #1 — erciz, 2005-02-10T12:37Z

Vad är det för fel på det här: 

```
SELECT medlemmar.*, 
(SELECT Count( * ) 
FROM rubriker 
WHERE medlem='{$_GET['id']}') 
AS antal 
FROM medlemmar 
WHERE id='{$_GET['id']}'
```

 ?

kan jag göra det på nåt annat sätt?

inte heller detta funkar för mig:

```
SELECT medlemmar.* Count(rubriker.medlem)
FROM medlemmar, rubriker 
WHERE id='{$_GET['id']}'
AND medlem='{$_GET['id']}'
```

va e fel? hur ska jag göra?

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

## #2 — LarsG, 2005-02-10T13:05Z

Det är inget fel på den första ur SQL synpunkt.

Med den andra så måste du ha en group by där du anger alla kolumner i medlemmar.

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

## #3 — erciz, 2005-02-10T13:21Z

Använder MySQL, och den första funkar inte för mig, men ska testa den andra med de ändringar du föreslog.

Menar du att jag ska lägga till GROUP BY medlemmar.\* i den andra?

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

## #4 — LarsG, 2005-02-10T13:31Z

Nej, ange alla kolumner,du kan inte använda \* i group by.

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

## #5 — erciz, 2005-02-10T13:38Z

Jag provade med GROUP BY medlemmar.id (primärnyckeln), men det funkade inte, och inte hellar alla fält i medlemmar funkade....

finns det någon annan varian jag kan testa, borde väl finnas någon variant med JOIN... men jag är inte så bra på dom...

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

## #6 — LarsG, 2005-02-10T13:47Z

Vad betyder

> men det funkade inte

?

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

## #7 — erciz, 2005-02-10T18:56Z

att jag får felmeddelandet: 
mysql_fetch_array(): supplied argument is not a valid MySQL result resource

När jag försöker hämta data från MySQL på min PHP-sida. 

Denna kod funkar, men den har ingen COUNT() som jag vill ha:

```
SELECT medlemmar.* 
FROM medlemmar 
WHERE medlem='{$_GET['id']}'
```

..jag vill alltså räkna ihop en gruppsumma i en annan tabell också...

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

## #8 — LarsG, 2005-02-10T19:21Z

Lägg till ett anrop till mysql_error 

```
$q = "select ...";
$c = mysql_query($q) or die (mysql_error() .  " when doing" . $q);
```

posta resultatet.

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

## #9 — erciz, 2005-02-10T19:55Z

Tack, du lärde mig felsöka SQL-satser lite smidigare ;)
Men blev inte mkt klokar av felmeddelandet:

> You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(\*) FROM rubriker WHERE medlem='1') AS antal FROM m when doing SELECT medlemmar.\*, (SELECT COUNT(\*) FROM poster WHERE medlem='1') AS antal FROM medlemmar WHERE id='1'

Det skumma är att satserna fungerar bra var för sig.

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

## #10 — aasah, 2005-02-11T08:26Z

> **erciz felmeddelande skrev:**
>
> .... 'SELECT COUNT(\*) FROM rubriker WHERE medlem='1') ....

Jag tror att du har ett problem med appostrofer. Det där är korrekt om och endast om fältet medlem är en VARCHAR eller en TEXT. Om det däremot är ett heltal, vilket vore  vettigare, så försöker du jämföra ett tal med ett strängvärde just nu!

medlem='1' , dvs strängen 1 Byt mot medlem=1 ==\> heltalet 1

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

## #11 — erciz, 2005-02-11T10:44Z

> **aasah skrev:**
>
> > **erciz felmeddelande skrev:**
> >
> > .... 'SELECT COUNT(\*) FROM rubriker WHERE medlem='1') ....
>
> Jag tror att du har ett problem med appostrofer. Det där är korrekt om och endast om fältet medlem är en VARCHAR eller en TEXT. Om det däremot är ett heltal, vilket vore  vettigare, så försöker du jämföra ett tal med ett strängvärde just nu!
> 
> medlem='1' , dvs strängen 1 Byt mot medlem=1 ==\> heltalet 1

Provade, men det löste inte problemet.
Egentligen ska två variabler plockas in från PHP där, men nu testade jag att hårdkoda 1 och 1, men det funkade inte endå.

Men går det inte att fixa med någon JOIN tror ni?

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

## #12 — erciz, 2005-02-11T11:02Z

Postar en liknande tabellstruktur med bara de berörda kolumnerna:

```
SQL: 
"SELECT medlemmar.*, 
(SELECT COUNT(*) 
FROM poster 
WHERE medlem=3) AS antal 
FROM medlemmar 
WHERE id=3";

poster
+------+----------+--------+
|  id  |  medlem  |  text  |
+------+----------+--------+
|  1   |    3     |  Hej.. |
|  2   |    3     | Kanske |
|  3   |    5     | Nämen. |
+------+----------+--------+

medlemmar
+------+----------+--------+
|  id  |   namn   |   År   |
+------+----------+--------+
|  1   |  Jonas   |  2005  |
|  2   |  Johan   |  2001  |
|  3   |  Bertil  |  2004  |
+------+----------+--------+
```

Jag vill alltså SELECTa en medlem beroende på vilket input jag får t.ex. id=3. Och då vill jag skriva ut kolumnerna i medlemmar och antal poster medlemmen har gjort med COUNT(\*) FROM poster WHERE medlem=3. Hoppas någon kan hitta felet nu....

Databas: MySQL version 4.0.23

Resultatet ska alltså bli:

```
+------+----------+--------+-------+
|  id  |   namn   |   år   | antal |
+------+----------+--------+-------+
|  3   |  Bertil  |  2004  |   2   |
+------+----------+--------+-------+
```

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

## #13 — erciz, 2005-02-11T11:17Z

Hmm, läste lite i MySQLs manual om att "Subqueries" stöds från version 4.1.x.

Visst betyder det att min sql-variant inte funkar då? :(

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

## #14 — aasah, 2005-02-11T11:53Z

....

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

## #15 — aasah, 2005-02-11T11:59Z

Ja, MySQL's tidigare versioner saknar subquerys dvs delfrågor.

Baserat på din tabellstruktur nedan, pröva med detta:

```
SELECT M.*, count(P.id) FROM medlemmar M, poster P
WHERE P.medlem = M.id AND M.id = <värde>
```

Jag har fått för mig att denna fråga kan funka i MySQL. Pröva!

```
SQL: 

poster
+------+----------+--------+
|  id  |  medlem  |  text  |
+------+----------+--------+
|  1   |    3     |  Hej.. |
|  2   |    3     | Kanske |
|  3   |    5     | Nämen. |
+------+----------+--------+

medlemmar
+------+----------+--------+
|  id  |   namn   |   År   |
+------+----------+--------+
|  1   |  Jonas   |  2005  |
|  2   |  Johan   |  2001  |
|  3   |  Bertil  |  2004  |
+------+----------+--------+

Resultatet ska alltså bli:
+------+----------+--------+-------+
|  id  |   namn   |   år   | antal |
+------+----------+--------+-------+
|  3   |  Bertil  |  2004  |   2   |
+------+----------+--------+-------+
```

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

## #16 — erciz, 2005-02-11T12:59Z

> **aasah skrev:**
>
> Ja, MySQL's tidigare versioner saknar subquerys dvs delfrågor.
> 
> Baserat på din tabellstruktur nedan, pröva med detta:
> 
>
>
> ```
> SELECT M.*, count(P.id) FROM medlemmar M, poster P
> WHERE P.medlem = M.id AND M.id = <värde>
> ```
>
> 
> 
> Jag har fått för mig att denna fråga kan funka i MySQL. Pröva!

Jag provade. MySQL sa följande: 

> Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause when doing SELECT medlemmar.\*, COUNT(poster.id) AS antal FROM medlemmar, poster WHERE poster.medlem = medlemmar.id AND medlemmar.id='1'

Jag lade till "GROUP BY medlemmar.id" på slutet och då funkade det!

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

## #17 — Brimba, 2005-02-11T13:08Z

Prova med detta. Tror inte att du kan gruppera på \*.

```
SELECT
	M.id, M.namn, COUNT(P.id)
FROM
	medlemmar M
	INNER JOIN poster P ON M.id = P.medlem
GROUP BY 
	M.id, M.namn
HAVING 
	M.id = 1
```

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

## #18 — erciz, 2005-02-12T16:01Z

> **aasah skrev:**
>
> ```
> SELECT M.*, count(P.id) FROM medlemmar M, poster P
> WHERE P.medlem = M.id AND M.id = <värde> GROUP BY M.id
> ```

aasahs SQL-sats funkar NÄSTAN, problemet är när en medlem inte har några inlägg i tabellen poster, då vill jag ha resultat som tabellerna nedan. Men med den SQL-sats jag använder nu så går det inte då WHERE-satsen blir fel.

```
WHERE P.medlem = M.id AND M.id = <värde>
```

blir

```
WHERE false AND true
```

vilket resulterar att ingen rad selectas.

```
SQL: 

poster
+------+----------+--------+
|  id  |  medlem  |  text  |
+------+----------+--------+
|  1   |    3     |  Hej.. |
|  2   |    3     | Kanske |
|  3   |    5     | Nämen. |
+------+----------+--------+

medlemmar
+------+----------+--------+
|  id  |   namn   |   År   |
+------+----------+--------+
|  1   |  Jonas   |  2005  |
|  2   |  Johan   |  2001  |
|  3   |  Bertil  |  2004  |
+------+----------+--------+

Resultatet ska alltså bli:
+------+----------+--------+-------+
|  id  |   namn   |   år   | antal |
+------+----------+--------+-------+
|  1   |  Jonas   |  2005  |   0   |
+------+----------+--------+-------+
```

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

## #19 — erciz, 2005-02-12T16:26Z

Jag fick fram en lösning nu till slut. LEFT JOIN var nyckeln som löste problemet!

```
SELECT medlemmar.*, COUNT(poster.id) AS antal 
FROM medlemmar 
LEFT JOIN poster 
ON medlemmar.id = poster.medlem 
WHERE medlemmar.id='$id' 
GROUP BY medlemmar.id
```

Tack alla som försökte hjälpa mig, och som hjälpte mig på traven...

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/122149-count-från-annan-tabell
