webForumDet fria alternativet

Advancerad sql query

Databaser & SQL

2 svar · 391 visningar · startad av Naxiey

Medlem sedan okt. 20112 inlägg
Frågan#1

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!

Medlem sedan aug. 20039 340 inlägg
#2

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
Medlem sedan okt. 20112 inlägg
#3

Tack så mycket!

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)