Выбирается только первый ID...

anDeRan

Новичок
Выбирается только первый ID...

У меня есть такой запрос (выбирает тему опроса, поле, цвет поля, количество проголосовавших за это поле):

Код:
SELECT s.subject, f.field, f.color, count(u.id)
FROM poll_subjects s, poll_fields f
LEFT JOIN poll_users u ON u.subject_id='$id' AND u.field_id=f.id
WHERE s.id='$id' AND f.subject_id='$id'
GROUP BY f.id
Все вроде бы хорошо, но запрос выбирает все нормально ТОЛЬКО для $id = 1, хотя в БД уже есть три опроса, для остальных он выбирает все кроме count(u.id) - это поле он выбирает как 0...

В базе данных с данными все в порядке, я уже проверял неоднократно...

Не могу понять в чем дело? Почему все нормально для $id = 1, для для других значений - count(u.id) = 0???

Помогите, пожалуйста (MySQL 4.0.16).
 

alpine

Новичок
anDeRan
[sql]
WHERE s.id='$id' AND f.subject_id='$id'
[/sql]
А что это у тебя за объединение таблиц poll_subjects и poll_fields INNER JOIN-ом такое интересное?!
 

alpine

Новичок
anDeRan
И я вот не понял где у тебя условие объдинения таблиц poll_subjects и poll_fields.

-~{}~ 30.08.05 17:11:

И какой смысл в этом "фильтре":
WHERE s.id='$id' AND f.subject_id='$id'
?

-~{}~ 30.08.05 17:13:

и тоже самое кстати здесь:
[sql]
ON u.subject_id='$id' AND u.field_id=f.id
[/sql]
Ман не хочешь почитать?
 

anDeRan

Новичок
Код:
WHERE s.id='$id' AND f.subject_id='$id'
Как-бы и объединяет эти таблицы... В этом их смысл... Я не пойму только почему для первого ID в выходит нормально, а остальных случаях == 0 :(
 

Falc

Новичок
anDeRan
Если count(u.id) = 0 то значит в poll_users у тебя нет записей соответствующих твоему id.
 

anDeRan

Новичок
Если count(u.id) = 0 то значит в poll_users у тебя нет записей соответствующих твоему id.
Но у меня в таблице пользователей есть 1 пользователь для второго опроса и 2 для третьего, которые как бы проголосовали. Сами поля для опросов само-собой внесены... С базой все намана...
 

anDeRan

Новичок
poll_subjects
Код:
+----+------------------------+--------+----------------+
| id | subject                | expire | date           |
+----+------------------------+--------+----------------+
|  1 | This is FIRST subject  |      0 | 20050829094026 |
|  2 | THIS IS second SUBJECT |      0 | 20050829154640 |
|  3 | This is TEST           |      0 | 20050830161506 |
+----+------------------------+--------+----------------+
poll_fields
Код:
+----+------------+-------+-----------------------+
| id | subject_id | color | field                 |
+----+------------+-------+-----------------------+
|  1 |          1 |     0 | Hello world 11111111  |
|  2 |          1 |     1 | Hello world 222222222 |
|  3 |          1 |     3 | Hello world 3333333   |
|  4 |          1 |     6 | Hello world 444444444 |
|  5 |          1 |     7 | Hello world 5555555   |
| 13 |          2 |     5 | testtt                |
| 12 |          2 |     3 | teeest                |
| 14 |          3 |     3 | TEST 1111             |
| 15 |          3 |     6 | TESST 2222            |
+----+------------+-------+-----------------------+
poll_users
Код:
+----+------------+----------+--------------+----------------+
| id | subject_id | field_id | ip           | date           |
+----+------------+----------+--------------+----------------+
|  1 |          1 |        2 | 192.168.0.8  | 20050829122155 |
|  2 |          1 |        2 | 192.168.0.8  | 20050829122155 |
|  3 |          1 |        1 | 192.168.0.8  | 20050829122155 |
|  4 |          1 |        3 | 192.168.0.8  | 20050829122155 |
|  5 |          1 |        5 | 192.168.0.8  | 20050829122155 |
|  9 |          2 |        1 | 192.168.0.8  | 20050829122155 |
|  8 |          1 |        5 | 192.168.0.8  | 20050829122155 |
| 10 |          3 |        2 | 192.168.0.8  | 20050829122155 |
+----+------------+----------+--------------+----------------+
 

Falc

Новичок
anDeRan
У тебя избыточность данных вот и получилась колизия:
poll_users:
subject_id | field_id
2 | 1

poll_fields:
id | subject_id
1 | 1
 

Falc

Новичок
anDeRan
В одной таблице field_id равному 1 соответствует subject_id равный 2, а в другой равный 1.
 
Сверху