Author |
Message |
Maus
Модератор

Joined: 29 Jun 2003
Posts: 8151
Карма: 271 поощрить/наказать
Location: пос. Омсукчан Магаданской области
|
Posted: Fri Aug 04, 2006 11:20 am ()
Post subject:
|
|
|
|
Back to top |
|
 |
Дмитрий К.
Участник форума

Joined: 07 Sep 2004
Posts: 229
Карма: -24 поощрить/наказать
Location: Внутренний мир
|
Posted: Fri Aug 04, 2006 11:20 am (спустя 1 секунду; написано за 2 минуты 45 секунд)
Post subject:
|
|
У меня назрел вопрос по поводу совместного использования SELECT(*) из одной таблицы и SELECT COUNT(*) из другой. Думаю, понятнее будет через код: Code (any language): | скопировать код в буфер обмена | mysql_qw('SELECT firms.*, COUNT(comments.*) FROM firms, comments AS counter WHERE firms.catcode=? AND comments.placeid=? AND comments.place=?', $_GET['code'], $_GET['code'], 'catalog') | Но он выдаёт ошибку синтаксиса. Подскажите, пожалуйста, как решить проблему?
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Fri Aug 04, 2006 12:12 pm (спустя 52 минуты; написано за 2 минуты 33 секунды)
Post subject:
|
|
Дмитрий К. wrote: |
он выдаёт ошибку синтаксиса | Кто «он»? Какую ошибку? Если у Вас вопрос по MySQL, то и показывать надо SQL-запрос (уже сгенерённый!), а не php-код генерации запроса. P.S. И какое отношение Ваш вопрос имеет к данному топику?
|
|
Back to top |
|
 |
Дмитрий К.
Участник форума

Joined: 07 Sep 2004
Posts: 229
Карма: -24 поощрить/наказать
Location: Внутренний мир
|
Posted: Fri Aug 04, 2006 12:39 pm (спустя 26 минут; написано за 4 минуты 32 секунды)
Post subject:
|
|
Код. Точнее попытка его выполнения.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM firms, comments AS counter WHERE firms Quote: |
Если у Вас вопрос по MySQL, то и показывать надо SQL-запрос (уже сгенерённый!), а не php-код генерации запроса. |
Code (SQL): | скопировать код в буфер обмена | SELECT firms.*, COUNT(comments.*) FROM firms, comments AS counter WHERE firms.catcode=1 AND comments.placeid=1 AND comments.place='catalog' | Quote: |
P.S. И какое отношение Ваш вопрос имеет к данному топику? | Ну, если я сделаю множество однотипных запросов в цикле, то оптимальное количество SQL-запросов на страницу будет превышено многократно, в моём случае это приведёт к недопустимой скорости загрузки страницы:) Вышеобозначенным запросом я пытаюсь решить эту проблему.
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Fri Aug 04, 2006 1:10 pm (спустя 30 минут; написано за 1 минуту 42 секунды)
Post subject:
|
|
Своими словами объясните, как у Вас эти две таблицы связаны при выборке.
|
|
Back to top |
|
 |
Дмитрий К.
Участник форума

Joined: 07 Sep 2004
Posts: 229
Карма: -24 поощрить/наказать
Location: Внутренний мир
|
Posted: Fri Aug 04, 2006 2:37 pm (спустя 1 час 27 минут; написано за 5 минут 52 секунды)
Post subject:
|
|
В таблице firms - перечень фирм, в таблице comments - всякие комментарии, в т.ч. по фирмам. Моя задача вывести на страницу перечень фирм, одновременно выводя количество комментариев, приходящихся на каждую фирму. firms.catcode - id фирмы, comments.placeid - он же, предназначен для определения принадлежности комментария к конкретной фирме, comments.place - место сайта, в котором оставлен комментарий (в данном случае в каталоге фирм).
|
|
Back to top |
|
 |
Maus
Модератор

Joined: 29 Jun 2003
Posts: 8151
Карма: 271 поощрить/наказать
Location: пос. Омсукчан Магаданской области
|
Posted: Fri Aug 04, 2006 3:12 pm (спустя 34 минуты; написано за 36 секунд)
Post subject:
|
|
Дмитрий К.
а если в COUNT указать конкретное поле из `comments` ?
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Fri Aug 04, 2006 3:26 pm (спустя 14 минут; написано за 6 минут 36 секунд)
Post subject:
|
|
Дмитрий К., у Вас должно получиться что-то типа: Code (SQL): | скопировать код в буфер обмена | SELECT firms.*, COUNT(comments.placeid) FROM firms LEFT JOIN comments ON (firms.catcode=comments.placeid AND comments.place='catalog') GROUP BY firms.catcode | И я всё равно считаю, что этот вопрос тут не в тему.
|
|
Back to top |
|
 |
Maus
Модератор

Joined: 29 Jun 2003
Posts: 8151
Карма: 271 поощрить/наказать
Location: пос. Омсукчан Магаданской области
|
Posted: Fri Aug 04, 2006 3:30 pm (спустя 3 минуты; написано за 2 минуты 6 секунд)
Post subject:
|
|
bæv
запятая - это синоним INNER JOIN в MySQL . А вот насчет необходимости GROUP BY Вы наверняка правы.
|
|
Back to top |
|
 |
Дмитрий К.
Участник форума

Joined: 07 Sep 2004
Posts: 229
Карма: -24 поощрить/наказать
Location: Внутренний мир
|
Posted: Fri Aug 04, 2006 4:17 pm (спустя 46 минут; написано за 5 секунд)
Post subject:
|
|
Quote: |
а если в COUNT указать конкретное поле из `comments` ? | Так не работает. Code (SQL): | скопировать код в буфер обмена | SELECT firms.*, COUNT(comments.placeid) FROM firms LEFT JOIN comments ON (firms.catcode=comments.placeid AND comments.place='catalog') GROUP BY firms.catcode | Так выдаётся результат, принцип постороения которого я так и не смог понять. Впрочем, в нём для каждой фирмы появился ключ [COUNT(comments.placeid)], который всегда равен 0. Quote: |
И я всё равно считаю, что этот вопрос тут не в тему. | Какие действия с моей стороны смогут изменить эту неловкую ситуацию?:)
|
|
Back to top |
|
 |
Maus
Модератор

Joined: 29 Jun 2003
Posts: 8151
Карма: 271 поощрить/наказать
Location: пос. Омсукчан Магаданской области
|
Posted: Fri Aug 04, 2006 4:51 pm (спустя 33 минуты; написано за 4 минуты 19 секунд)
Post subject:
|
|
Дмитрий К.
Имхо, лучше разделить на 2 запроса - по фирмам и что-то вроделибо же думать над GROUP BY дальше (для этого сначала вообще замените COUNT() на comments.*
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Fri Aug 04, 2006 5:29 pm (спустя 38 минут; написано за 1 минуту 54 секунды)
Post subject:
|
|
Дмитрий К. wrote: |
всегда равен 0 | — значит, у Вас взаимоисключающие условия: либо firms.catcode=comments.placeid, либо comments.place='catalog' P.S. Я проверял на таблицах со схожей структорой — у меня всё работает.
|
|
Back to top |
|
 |
Дмитрий К.
Участник форума

Joined: 07 Sep 2004
Posts: 229
Карма: -24 поощрить/наказать
Location: Внутренний мир
|
Posted: Fri Aug 04, 2006 6:47 pm (спустя 1 час 17 минут; написано за 3 секунды)
Post subject:
|
|
УРРРА! Заработала! bæv, Maus, БОЛЬШОЕ спасибо, очень выручили! Вопрос решен, тему можно закрыть.
|
|
Back to top |
|
 |
Markus
Участник форума
Joined: 02 Feb 2004
Posts: 210
Карма: 3 поощрить/наказать
|
Posted: Sun Feb 04, 2007 4:09 pm (спустя 5 месяцев 30 дней 21 час 21 минуту; написано за 2 минуты 11 секунд)
Post subject:
|
|
Всем доброго времени суток. Прошу прощения что поднял данную тему. Воспользовался поиском, но решения не нашел. Тем более что задача схожа с тем что здесь обсуждается. Итак:Есть три таблицы: Таблица №1 t1 id|f1|f2|..|..|.. id - уникальный ID записи таблицы Таблица №1 t2 id|t1_id|f1|f2|..|.. id - уникальный ID записи таблицы t1_id - то же что и в id таблицы t1 Таблица №1 t3 id|t1_id|t2_id|f2|..|..|.. id - уникальный ID записи таблицы t1_id - то же что и в id таблицы t1 t2_id - то же что и в id таблицы t2 Нужно выбрать из таблицы t1 все записи с подсчетом кол-ва записей в таблице t2 удовлетворяющих условию `t1`.`id`=`t2`.`t1_id` и подсчетом записей кол-ва записей в таблице t3 удовлетворяющих условию `t1`.`id`=`t3`.`t2_id` Пробовал так: Code (SQL): | скопировать код в буфер обмена | SELECT `t1`.`id`, COUNT(`t2`.`t1_id`), COUNT(`t3`.`t1_id`) FROM `t1` LEFT JOIN `t2` ON `t1`.`id`=`t2`.`t1_id` LEFT JOIN `t3` ON `t1`.`id`=`t3`.`t1_id` GROUP BY `t1`.`id` | Вроде работает, но выдает неверные данные. например: имеем в t1 3 записи в t2 одну запись в t3 две записи с тем же t2_id что и id таблицы t2 и с тем же t1_id что и id таблицы t1 В результате получаемХотя во втором столбце первой строки должно было быть 1
|
|
Back to top |
|
 |
Dark-Demon
Участник форума
Banned
Joined: 04 Feb 2007
Posts: 45
Карма: -3 поощрить/наказать
Location: spb
|
Posted: Mon Feb 05, 2007 2:57 am (спустя 10 часов 48 минут; написано за 2 минуты 52 секунды)
Post subject:
|
|
всё правильно, оба каунта выводят одни и те же числа - число строк результата объединения, поэтому тебе нужно пересчитать только уникальные идентификаторы:и далее по тексту...
|
|
Back to top |
|
 |
Markus
Участник форума
Joined: 02 Feb 2004
Posts: 210
Карма: 3 поощрить/наказать
|
Posted: Mon Feb 05, 2007 3:20 pm (спустя 12 часов 22 минуты; написано за 16 секунд)
Post subject:
|
|
Dark-Demon
Спасибо, все работает!
|
|
Back to top |
|
 |
|