Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбрать данные из таблиц форума одним запросом
 
 автор: zxcAq   (29.05.2007 в 00:41)   письмо автору
 
 

Доброго времени суток!
Нужно одним запросом выбрать всё из таблицы
s_forum_topics:
`id`
`sectid`
`author`
`date`
`title`
`top`
`closed`
Затем посчитать сколько постов имеет юзер, айди которого находится в `author` таблицы s_forum_topics(таблица с топиками),
т.е надо сосчитать сколько раз его ид встречается в `author` таблицы s_forum_posts(таблица с постами)
s_forum_posts:
`id`
`tid`
`author`
`date`
`text`
`firstpost`
И ещё по тому же айди в `author` таблицы s_forum_topics, узнать ник автора из таблицы s_users
имя находится в поле `login`, айди хранятся в поле `id`.
И как я уже сказал, всё это нужно сделать одним запросом.
Если кто меня понял, то помогите пожалуйста :) Два дня читал мануал, пытался сам сделать, но и близко не приблизился к решению.
Спасибо за внимание :)

Ах да, и упорядочить это надо по `top` desc , `date` desc из s_forum_topics :-)) Я вообще с этим майскьюэлем не могу разобраться :-(

   
 
 автор: cheops   (29.05.2007 в 08:50)   письмо автору
 
   для: zxcAq   (29.05.2007 в 00:41)
 

Хм... а почему именно одним запросом? Здесь вероятно одним запросом не получится, но даже если бы получилось, такой запрос вряд ли работал быстрее, чем три отдельных, а при больших объёмах данных - 100% медленее.

   
 
 автор: zxcAq   (29.05.2007 в 13:38)   письмо автору
 
   для: cheops   (29.05.2007 в 08:50)
 

>Хм... а почему именно одним запросом? Здесь вероятно одним запросом не получится, но даже если бы получилось, такой запрос вряд ли работал быстрее, чем три отдельных, а при больших объёмах данных - 100% медленее.

А непосредственно сами запросы можно? Я так не пойму как это реализовать :)

   
 
 автор: Trianon   (29.05.2007 в 09:40)   письмо автору
 
   для: zxcAq   (29.05.2007 в 00:41)
 

>Нужно одним запросом выбрать всё из таблицы
>s_forum_topics:
> `id`
> `sectid`
> `author`
> `date`
> `title`
> `top`
> `closed`
SELECT `id`,`tid`,`author` AS a_id,`date`,`text`,`firstpost`
, t_counts.cnt as u_count
, s_users.login as a_login
FROM s_forum_topics

>Затем посчитать сколько постов имеет юзер, айди которого находится в `author` таблицы s_forum_topics(таблица с топиками),

LEFT JOIN (
SELECT COUNT(id) AS cnt, author FROM s_forum_posts GROUP BY author
) as t_counts ON a_id = t_counts.author


>т.е надо сосчитать сколько раз его ид встречается в `author` таблицы s_forum_posts(таблица с постами)
>s_forum_posts:
> `id`
> `tid`
> `author`
> `date`
> `text`
> `firstpost`
>И ещё по тому же айди в `author` таблицы s_forum_topics, узнать ник автора из таблицы s_users
>имя находится в поле `login`, айди хранятся в поле `id`.
LEFT JOIN s_users ON a_id = s_users.id

>И как я уже сказал, всё это нужно сделать одним запросом.
>Если кто меня понял, то помогите пожалуйста :) Два дня читал мануал, пытался сам сделать, но и близко не приблизился к решению.
>Спасибо за внимание :)
>
>Ах да, и упорядочить это надо по `top` desc , `date` desc из s_forum_topics :-))
ORDER BY s_forum_topics.`top` desc , s_forum_topics.`date` desc

>Я вообще с этим майскьюэлем не могу разобраться :-(



SELECT `id`,`tid`,`author` AS a_id,`date`,`text`,`firstpost` 
        , t_counts.cnt as u_count
        , s_users.login as a_login
  FROM s_forum_topics 
    LEFT JOIN 
    (SELECT COUNT(id) AS cnt, author FROM s_forum_posts GROUP BY author 
    ) as t_counts ON a_id = t_counts.author 
    LEFT JOIN s_users ON a_id = s_users.id
    ORDER BY s_forum_topics.`top` desc , s_forum_topics.`date` desc 

   
 
 автор: zxcAq   (29.05.2007 в 13:34)   письмо автору
 
   для: Trianon   (29.05.2007 в 09:40)
 

Вероятно где-то ошибка.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Этот запрос ничего не возвращает. :-(
Не могли бы вы исправить ошибку, если она есть. Или это я что-то не так делаю?
Спасибо.

   
 
 автор: Trianon   (29.05.2007 в 14:31)   письмо автору
 
   для: zxcAq   (29.05.2007 в 13:34)
 

поставьте перед этим вывод mysql_error()
что сообщает?

   
 
 автор: zxcAq   (29.05.2007 в 14:43)   письмо автору
 
   для: Trianon   (29.05.2007 в 14:31)
 

Column 'id' in field list is ambiguous

   
 
 автор: Trianon   (29.05.2007 в 14:55)   письмо автору
 
   для: zxcAq   (29.05.2007 в 14:43)
 

Тогда надо уточнить имена

SELECT t.id, t.tid, t.author  AS a_id, t.`date`,t.`text`,t.`firstpost`  
        , t_counts.cnt as u_count 
        , s_users.login as a_login 
  FROM s_forum_topics  AS t
    LEFT JOIN  
    (SELECT COUNT(id) AS cnt, author FROM s_forum_posts GROUP BY author  
    ) as t_counts ON a_id = t_counts.author  
    LEFT JOIN s_users ON a_id = s_users.id 
    ORDER BY s_forum_topics.`top` desc , s_forum_topics.`date` desc  

   
 
 автор: zxcAq   (29.05.2007 в 15:14)   письмо автору
 
   для: Trianon   (29.05.2007 в 14:55)
 

А теперь:
Unknown column 't.tid' in 'field list'

   
 
 автор: Trianon   (29.05.2007 в 15:23)   письмо автору
 
   для: zxcAq   (29.05.2007 в 15:14)
 


SELECT t.id, t.sectid, t.author  AS a_id, t.`date`,t.title,t.top,t.closed
        , t_counts.cnt as u_count  
        , s_users.login as a_login  
  FROM s_forum_topics  AS t 
    LEFT JOIN   
    (SELECT COUNT(id) AS cnt, author FROM s_forum_posts GROUP BY author   
    ) as t_counts ON a_id = t_counts.author   
    LEFT JOIN s_users ON a_id = s_users.id  
    ORDER BY s_forum_topics.`top` desc , s_forum_topics.`date` desc 

   
 
 автор: zxcAq   (29.05.2007 в 15:33)   письмо автору
 
   для: Trianon   (29.05.2007 в 15:23)
 

И снова еррор.
Unknown column 'a_id' in 'on clause'

   
 
 автор: Trianon   (29.05.2007 в 16:10)   письмо автору
 
   для: Trianon   (29.05.2007 в 15:23)
 


SELECT t.id, t.sectid, t.author  AS a_id, t.`date`,t.title,t.top,t.closed 
        , t_counts.cnt as u_count   
        , s_users.login as a_login   
  FROM s_forum_topics  AS t  
    LEFT JOIN    
    (SELECT COUNT(id) AS cnt, author FROM s_forum_posts GROUP BY author    
    ) as t_counts ON t.aurhor = t_counts.author    
    LEFT JOIN s_users ON t.aurhor = s_users.id   
    ORDER BY s_forum_topics.`top` desc , s_forum_topics.`date` desc  

   
 
 автор: Faraon   (29.05.2007 в 16:42)   письмо автору
 
   для: Trianon   (29.05.2007 в 16:10)
 

Хм... Что то я тогда смысла не вижу этой записи

t.author  AS a_id

   
 
 автор: zxcAq   (30.05.2007 в 01:01)   письмо автору
 
   для: Trianon   (29.05.2007 в 16:10)
 

Спасибо огромное... Всё работает.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования