brandy
Новичок
выборка из 3-х таблиц. В 2-х последних выбрать нужно только кол-во
Нужно выбрать из одной таблицы products все записи. А из таблиц comments(коментарии) и votes(голоса) количество этих самых коментариев и количество голосов к продуктам.
Пример.
products
+--------------+--------------------------------+
|-- prodID ----| prodName ----------------------|
+--------------+--------------------------------+
|-- 1 ---------| Name1 -------------------------|
+--------------+--------------------------------+
|-- 2 ---------| Name2 -------------------------|
+--------------+--------------------------------+
|-- 3 ---------| Name3 -------------------------|
+--------------+--------------------------------+
|-- 4 ---------| Name4 -------------------------|
+--------------+--------------------------------+
comments
+--------------+--------------------------------+---------------------------+
|commentID ----| prodID ------------------------| text ---------------------|
+--------------+--------------------------------+---------------------------+
|-- 1 ---------| 1 -----------------------------| text text text -----------|
+--------------+--------------------------------+---------------------------+
|-- 2 ---------| 1 -----------------------------| text2 text2 --------------|
+--------------+--------------------------------+---------------------------+
|-- 3 ---------| 1 -----------------------------| text3 text 3text ---------|
+--------------+--------------------------------+---------------------------+
|-- 4 ---------| 2 -----------------------------| text22 text22 ------------|
+--------------+--------------------------------+---------------------------+
|-- 5 ---------| 3 -----------------------------| text3 3text22 ------------|
+--------------+--------------------------------+---------------------------+
votes
+--------------+--------------------------------+---------------------------+
|voteID -------| prodID ------------------------| mark ---------------------|
+--------------+--------------------------------+---------------------------+
|-- 1 ---------| 1 -----------------------------| 5 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 2 ---------| 1 -----------------------------| 4 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 3 ---------| 2 -----------------------------| 3 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 4 ---------| 2 -----------------------------| 3 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 5 ---------| 4 -----------------------------| 4 ------------------------|
+--------------+--------------------------------+---------------------------+
нужна такая выборка, которая вернет
+--------------+--------------+---------------------+---------------------------+
| prodID ------| prodName ----| count(comments) ----| count(marks) -------------|
+--------------+--------------+---------------------+---------------------------+
|-- 1 ---------| Name1 -------| 3 ------------------| 2 ------------------------|
+--------------+--------------+---------------------+---------------------------+
|-- 2 ---------| Name2 -------| 1 ------------------| 2 ------------------------|
+--------------+--------------+---------------------+---------------------------+
|-- 3 ---------| Name3 -------| 1 ------------------| 0 ------------------------|
+--------------+--------------+---------------------+---------------------------+
|-- 4 ---------| Name4 -------| 0 ------------------| 1 ------------------------|
+--------------+--------------+---------------------+---------------------------+
-~{}~ 24.11.05 18:55:
Если бы было 2 таблицы (products и напимер votes) то все хорошо получалось бы с помощью вот такого запроса
select p.prodID, count(voteID) as votes
from products p
left join votes as v on p.prodID=v.prodID
group by p.prodID
-~{}~ 24.11.05 18:57:
С тремя же таблицами такая вот выборка работает неверно:
select p.prodID, count(voteID) as votes, count(commentID) as comments
from products p
left join votes as v on p.prodID=v.prodID
left join comments c on p.prodID=c.prodID
group by p.prodID
Нужно выбрать из одной таблицы products все записи. А из таблиц comments(коментарии) и votes(голоса) количество этих самых коментариев и количество голосов к продуктам.
Пример.
products
+--------------+--------------------------------+
|-- prodID ----| prodName ----------------------|
+--------------+--------------------------------+
|-- 1 ---------| Name1 -------------------------|
+--------------+--------------------------------+
|-- 2 ---------| Name2 -------------------------|
+--------------+--------------------------------+
|-- 3 ---------| Name3 -------------------------|
+--------------+--------------------------------+
|-- 4 ---------| Name4 -------------------------|
+--------------+--------------------------------+
comments
+--------------+--------------------------------+---------------------------+
|commentID ----| prodID ------------------------| text ---------------------|
+--------------+--------------------------------+---------------------------+
|-- 1 ---------| 1 -----------------------------| text text text -----------|
+--------------+--------------------------------+---------------------------+
|-- 2 ---------| 1 -----------------------------| text2 text2 --------------|
+--------------+--------------------------------+---------------------------+
|-- 3 ---------| 1 -----------------------------| text3 text 3text ---------|
+--------------+--------------------------------+---------------------------+
|-- 4 ---------| 2 -----------------------------| text22 text22 ------------|
+--------------+--------------------------------+---------------------------+
|-- 5 ---------| 3 -----------------------------| text3 3text22 ------------|
+--------------+--------------------------------+---------------------------+
votes
+--------------+--------------------------------+---------------------------+
|voteID -------| prodID ------------------------| mark ---------------------|
+--------------+--------------------------------+---------------------------+
|-- 1 ---------| 1 -----------------------------| 5 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 2 ---------| 1 -----------------------------| 4 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 3 ---------| 2 -----------------------------| 3 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 4 ---------| 2 -----------------------------| 3 ------------------------|
+--------------+--------------------------------+---------------------------+
|-- 5 ---------| 4 -----------------------------| 4 ------------------------|
+--------------+--------------------------------+---------------------------+
нужна такая выборка, которая вернет
+--------------+--------------+---------------------+---------------------------+
| prodID ------| prodName ----| count(comments) ----| count(marks) -------------|
+--------------+--------------+---------------------+---------------------------+
|-- 1 ---------| Name1 -------| 3 ------------------| 2 ------------------------|
+--------------+--------------+---------------------+---------------------------+
|-- 2 ---------| Name2 -------| 1 ------------------| 2 ------------------------|
+--------------+--------------+---------------------+---------------------------+
|-- 3 ---------| Name3 -------| 1 ------------------| 0 ------------------------|
+--------------+--------------+---------------------+---------------------------+
|-- 4 ---------| Name4 -------| 0 ------------------| 1 ------------------------|
+--------------+--------------+---------------------+---------------------------+
-~{}~ 24.11.05 18:55:
Если бы было 2 таблицы (products и напимер votes) то все хорошо получалось бы с помощью вот такого запроса
select p.prodID, count(voteID) as votes
from products p
left join votes as v on p.prodID=v.prodID
group by p.prodID
-~{}~ 24.11.05 18:57:
С тремя же таблицами такая вот выборка работает неверно:
select p.prodID, count(voteID) as votes, count(commentID) as comments
from products p
left join votes as v on p.prodID=v.prodID
left join comments c on p.prodID=c.prodID
group by p.prodID