---
title: "Advancerad sql query"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/188103-advancerad-sql-query"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Naxiey"
published: "2011-10-17T14:08:12.000Z"
updated: "2011-10-17T15:45:41.000Z"
replies: 2
views: 405
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/188103-advancerad-sql-query"
---

# Advancerad sql query

## #1 — Naxiey, 2011-10-17T14:08Z

Hej!

Jag håller på att skapa en sida och försöker då ta fram lite data från database.

Jag har tre tabeller med dessa kolumner:

```
+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| category_id   | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| category_name | varchar(255)     | YES  |     |         |                | 
+---------------+------------------+------+-----+---------+----------------+

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| restaurant_id | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| name          | text             | NO   |     | NULL    |                | 
| address       | text             | YES  |     | NULL    |                | 
| mapslink      | varchar(255)     | YES  |     | NULL    |                | 
| website       | varchar(255)     | YES  |     | NULL    |                | 
| name_escaped  | varchar(255)     | YES  |     | NULL    |                | 
| phone         | varchar(25)      | YES  |     | NULL    |                | 
| category_id   | int(11)          | YES  |     | NULL    |                | 
+---------------+------------------+------+-----+---------+----------------+

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| category_id   | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| category_name | varchar(255)     | YES  |     |         |                | 
+---------------+------------------+------+-----+---------+----------------+
```

Det jag försöker göra är att visa data för varje restaurang (restaurant_id) 
Det jag har ränknat ut att jag behöver är:

```
restaurants.name, restaurants.name_escaped, restaurants.address, restaurants.mapslink, restaurants.phone
category.category_name
avg(comments.rating), count(comments.rating)
```

Jag har filat på denna queryn i ett antal timmar nu och lyckades nästan. Det som fortfarande är fel är att den ger tillbaka samma rating och num_rating till alla restauranger.

Den query jag använde var:

```
SELECT restaurant_id, name, name_escaped, address, mapslink, phone, 
	( SELECT avg(rating) FROM comments) as rating, 
	( SELECT count(rating) FROM comments ) as num_ratings, category.category_name
FROM restaurants
LEFT JOIN category
ON restaurants.category_id=category.category_id
```

Jag har testa lite med GROUP BY för det delar upp rating och num_rating men det ger bara felmeddelanden när man slår ihop allt.

Hoppas någon kan hjälpa mig  :)
Tack på förhand!

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

## #2 — nitro2k01, 2011-10-17T15:32Z

Sub-queryn **SELECT avg(rating) FROM comments** har ju ingen relation alls tills resten av frågan. Du får precis samma resultat som om du skulle ställa frågan 10 gånger om som en fristående fråga. Tala om för databasmotorn vilka kommentarer du vill få ut så funkar det nog bättre.

```
SELECT restaurant_id, name, name_escaped, address, mapslink, phone, 
	( SELECT avg(rating) FROM comments [B]WHERE comments.restaurant_id = restaurants.restaurant_id[/B]) as rating, 
	( SELECT count(rating) FROM comments [B]WHERE comments.restaurant_id = restaurants.restaurant_id[/B]) as num_ratings, category.category_name
FROM restaurants
LEFT JOIN category
ON restaurants.category_id=category.category_id
```

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

## #3 — Naxiey, 2011-10-17T15:45Z

Tack så mycket!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/188103-advancerad-sql-query
