Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте, приведу простой вариант своих таблиц, и запрос, он работает но выводит неправильное кол-во изображений.
Структура вроде бы самая обычная, вывод постов с кол-вом комментариев, кол-вом изображений в посте и фильтрацией по тегу, а сами теги я получаю уже вторым запросом, по массиву прогоняю и присваиваю каждому посту. т.е визуально выглядит так:
Отредактированно Марк (21.10.2013 14:36:55)
Неактивен
vasya написал:
1) FAQ №16
2) зачем в этом запросе tags_link ?
3) почему не хотите посчитать кол-во изображений через count(*) аналогично комментариям ?
В tags_link хранятся связи тегов с постом, а мне необходимо фильтровать результаты запроса по тегу
А вот посчитать кол-во изображений можно, а как вывести поле i.image ?
Неактивен
Марк написал:
В tags_link хранятся связи тегов с постом, а мне необходимо фильтровать результаты запроса по тегу
В текущем варианте запроса вы не выбираете ничего из таблицы tags_link
Марк написал:
А вот посчитать кол-во изображений можно, а как вывести поле i.image ?
По какому принципу определяется нужное поле из нескольких картинок?
Неактивен
Да написал в посте, а в запросе забыл указать.
По какому принципу определяется нужное поле из нескольких картинок?
А вот это я опустил, в таблице post_item есть поле sort по нему, я его ни когда не использовал так как по счастливой случайности всегда подставлялась нужная картинка
Отредактированно Марк (21.10.2013 16:42:46)
Неактивен
Вроде бы что то получилось, интересно как он с большими обьемами будет справляца)
Отредактированно Марк (21.10.2013 20:22:57)
Неактивен
Как
SELECT post, image, img, COUNT(*) AS itemCount FROM `post_item` GROUP BY post
сочетается с FAQ #16 ?
image и img у вас будут случайные.
что ткое img?
зачем 2 группировки?
Неактивен
vasya написал:
Как
SELECT post, image, img, COUNT(*) AS itemCount FROM `post_item` GROUP BY post
сочетается с FAQ #16 ?
image и img у вас будут случайные.
что ткое img?
зачем 2 группировки?
В post_item еще несколько полей которые необходимо выбрать и среди них есть с типом text из за этого как в FAQ #16 нужно сравнивать поля друг с другом, мне кажется это будет не очень эффективно в моем случае. А группировку убрал..
Отредактированно Марк (21.10.2013 22:09:57)
Неактивен
Марк написал:
В post_item еще несколько полей которые необходимо выбрать и среди них есть с типом text из за этого как в FAQ #16 нужно сравнивать поля друг с другом, мне кажется это будет не очень эффективно в моем случае.
На примере поясните, что-то у меня есть подозрение, что вы не правильно поняли о чем идет речь.
Неактивен
vasya написал:
Марк написал:
В post_item еще несколько полей которые необходимо выбрать и среди них есть с типом text из за этого как в FAQ #16 нужно сравнивать поля друг с другом, мне кажется это будет не очень эффективно в моем случае.
На примере поясните, что-то у меня есть подозрение, что вы не правильно поняли о чем идет речь.
Ну вот как в примере
Неактивен
Этот пример я же и писал И он не подтверждает высказывание, что если нужно выбрать несколько полей типа text, то их нужно сравнивать.
Неактивен
Хех) а какже тогда этот кусок кода
Неактивен
Вот сделал запрос по FAQ #16, по структуре выше, для вывода популярных тегов за неделю с кол-вом поствов которые были добавленны в эти теги за неделю. Посмотрите пожалуйста может можно оптимизировать?
Поле p.date - дата создания поста
Отредактированно Марк (22.10.2013 13:43:12)
Неактивен
Марк написал:
Хех) а какже тогда этот кусок кода
t.`user_id`= t1.`user_id` AND t.`time` = t1.`mtime`? наверное можно подругому
Этот кусок кода говорит о том, что комбинация (user_id,time) однозначно характеризует строку, а выбирать пи этом можно хоть 20 полей из строки (и сравнивать их естественно не нужно).
Неактивен
Марк написал:
Вот сделал запрос по FAQ #16, по структуре выше, для вывода популярных тегов за неделю с кол-вом поствов которые были добавленны в эти теги за неделю. Посмотрите пожалуйста может можно оптимизировать?
Поле p.date - дата создания постаSELECT t.id, t.tags, p.date, COUNT(*) as count FROM tags_link tl, tags t, post p JOIN (SELECT * FROM post WHERE date > DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)) AS p2 ON p.id=p2.id AND p.date=p2.date WHERE tl.post=p.id AND t.id=tl.tags AND p.date > DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) GROUP BY tl.tags
А где здесь FAQ #16 ? Вы группируете по tl.tags и выбираете при этом t.id, t.tags, p.date
Неактивен
vasya написал:
Марк написал:
Хех) а какже тогда этот кусок кода
t.`user_id`= t1.`user_id` AND t.`time` = t1.`mtime`? наверное можно подругомуЭтот кусок кода говорит о том, что комбинация (user_id,time) однозначно характеризует строку, а выбирать пи этом можно хоть 20 полей из строки (и сравнивать их естественно не нужно).
Насчет этого понял, спасибо, по второму запросу я его не правильно сделал? работает вроде как надо)
Неактивен
Марк написал:
по второму запросу я его не правильно сделал? работает вроде как надо)
1. делает кучу лишних действий (например, зачем там подзапрос?)
2. вроде как надо - это результат "счастливой случайности"
P.S. А с первым вы уже разобрались?
Неактивен
vasya написал:
Марк написал:
по второму запросу я его не правильно сделал? работает вроде как надо)
1. делает кучу лишних действий (например, зачем там подзапрос?)
2. вроде как надо - это результат "счастливой случайности"
P.S. А с первым вы уже разобрались?
1. Да действительно, убрал его (переусердствовал с FAQ №16)
2. Проверил без группировки, кол-во постов в теге за неделю выводит верно
3. С первым решил оставить как есть и не усложнять, потому как "счастливая случайность" на моей стороне и картинки всегда выводятся только первые т.е то что нужно, а если разобраться даже если и не первая попадется это не сильно страшно.
Но если бы вы предложили лучший способ я бы конечно еще поэкспериментировал
Неактивен
Страниц: 1