|
|
|
|
|
для: Trianon
(25.07.2007 в 11:50)
| | Всем спасибо, попробую все, доложу о результате:) Эх.. знал, что SQL сложный язык... справочник есть, но не сильно помогает, когда не знаешь где смотреть. Надо cookbook купить. | |
|
|
|
|
|
|
|
для: Trianon
(25.07.2007 в 09:12)
| | Голова садовая...
SHAman, Вы меня таки запутали.
Нет тут никакого соединения. Не нужны они при фиксированном tags.id = $num
Есть два независимых запроса.
Один
SELECT * FROM tags WHERE id = $num
|
Другой - тот, что я привел в (24.07.2007 в 22:28) | |
|
|
|
|
|
|
|
для: oradev
(25.07.2007 в 11:26)
| | верно. Один join я посеял. :)
Поправил, впрочем. | |
|
|
|
|
|
|
|
для: Trianon
(25.07.2007 в 09:12)
| |
SELECT st.id,st.id_user,t.name
FROM states_tags stg JOIN states st ON (stg.id_state = st.id)
JOIN tags t ON (stg.id_tag = t.id)
WHERE t.id = $num AND st.id_user = $user_id;
|
| |
|
|
|
|
|
|
|
для: SHAman
(24.07.2007 в 23:21)
| | В обратные косые кавычки (`бэктики`) заключаются имена таблиц и имена полей.
В "обычных кавычках" и 'апострофах' пишутся текстовые литералы, т.е. строки.
SELECT states.*, tags.*
FROM
states
JOIN states_tags ON states.id = states_tags.id_state
JOIN tags ON states_tags.id_tag = tags.id
WHERE
id_user = $user_id
AND tags.id_tag=$num
ORDER BY states.date
LIMIT $start_rec, $t_p_page
|
| |
|
|
|
|
|
|
|
для: oradev
(24.07.2007 в 23:20)
| | Ну почему же бесполезно?
Мне довольно интересно будет узнать у специалиста, почему коррелированный запрос оптимальнее обыкновенного вложенного. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2007 в 22:28)
| | С кавычками пока не разобрался. когда какие ставить. Обратные, на сколько я понял, нужно ставить, если обращаешься к ячейкам в базе. То есть, типа `id`. А прямые кавычки-апострофы, нужно когда подставляешь значения. Видимо, не до конца понял.
Запрос интересный, спасибо. Но он действительно не даст данных о тегах. Они нужны тоже. Подскажите, как это будет?
Ламерские вопросы, понимаю, но это не надолго. Я быстро учусь. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2007 в 22:28)
| | Насчет оптимальности с Trianon поспорил бы!!!
select * from states s WHERE EXISTS (SELECT * FROM states_tag stg where s.id = stg.id_state AND stg.id_tag = $num)
and s.id_user = $id_user;
|
Но спорить бесполезно,увы! | |
|
|
|
|
|
|
|
для: SHAman
(24.07.2007 в 22:00)
| | Если данных о тегах не требуется - вот такой вложенный запрос, по-моему - оптимален.
SELECT * FROM
states
WHERE
id_user = $user_id
AND
id IN (SELECT id_state
FROM states_tags
WHERE id_tag = $num
)
ORDER BY date
LIMIT $start_rec, $t_p_page
|
Если требуется - всяко лучше переписать через соединение. | |
|
|
|
|
|
|
|
для: SHAman
(24.07.2007 в 22:00)
| | У Вас все имена в апострофы взяты - и в результате Вы извлекаете и приравниваете текстовые строки.
'states_tags.id_tag' = 'tags.id' AND | |
|
|
|
|