webForumDet fria alternativet

Advancerad sql query

2 svar · 391 visningar · startad av Naxiey

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

nitro2k01Medlem sedan aug. 20037 630 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
NaxieyMedlem sedan okt. 20112 inlägg
#3

Tack så mycket!

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb