Проблемы с оптимизацией запросов - PullRequest
1 голос
/ 21 июля 2011

У меня было два запроса - один, который выбирает group_id, зная post_id, и один, который проверяет, что пользователь находится в этой группе.Я пытался оптимизировать их - сложить их вместе, но теперь выдает ошибку ...

SELECT COUNT(bio_community_group_members.id) AS count
FROM `bio_community_group_members`
JOIN `bio_community_posts`
    ON (`bio_community_posts`.`id` = `180`)
WHERE `bio_community_group_members`.`group_id` = 'bio_community_posts.group_id'
    AND `bio_community_posts`.`user_id` = '34'

Там написано:

Неизвестный столбец «180» в «в предложении».

Проблема: у меня есть эта запись!

Структура таблицы:

bio_community_posts:

  • id,
  • user_id,
  • group_id,
  • другие вещи;

bio_community_group_members:

  • id,
  • user_id,
  • group_id,
  • status,
  • другие вещи;

Мне нужно извлечь status из bio_community_group_members, если он существует.Это count было просто потому, что я не знал, как начать строить свой запрос.: (

Спасибо за совет.

Редактировать:

Хм ... теперь это работает ..... но есть идеи, как оптимизироватьэти два запроса и получить тот, который также выбирает status?

SELECT `group_id`
FROM `bio_community_posts`
WHERE `id` = 180

SELECT COUNT(id) AS count
FROM `bio_community_group_members`
WHERE `group_id` = 41
  AND `user_id` = '34'

Edit # 2:

Это то, что я искал:

SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_group_members`.`group_id` = 41
  AND `bio_community_group_members`.`user_id` = '34'
  AND `bio_community_posts`.`id` = '180'
GROUP BY `bio_community_group_members`.`status`

Спасибо!:)

Редактировать # 3:

Я думаю, мне нужно что-то вроде этого ...

SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members.group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'

Но:

[Err] 1054 - Неизвестный столбец 'bio_community_group_members.group_id' в 'предложении'.

Редактировать # 4:

Только что нашел ошибку в запросе.Вот окончательное решение:

SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

Удалить обратные кавычки (?) На 180, я думаю, что вы имели в виду «180»?Также удалите одинарные кавычки вокруг имени другого столбца, например:

SELECT COUNT(bio_community_group_members.id) AS count
FROM `bio_community_group_members`
JOIN `bio_community_posts`
    ON (`bio_community_posts`.`id` = '180') -- Replaced back- with single-quotes.
WHERE `bio_community_group_members`.`group_id` = `bio_community_posts.group_id` -- Replaced single- with back-quotes.
    AND `bio_community_posts`.`user_id` = '34'

Изменить после редактирования OP:

Я не совсем уверен, что за оптимизацияВы ищете, но я предполагаю, что это что-то вроде этого?

SELECT COUNT(id) AS count, status
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_group_members`.`group_id` = 41
  AND `bio_community_group_members`.`user_id` = '34'
  AND `bio_community_posts`.`id` = '180'
GROUP BY `bio_community_group_members`.`status`

Редактировать после комментариев: Исправлено ваше редактирование 3:

SELECT `bio_community_group_members`.`status`
FROM `bio_community_group_members`
JOIN `bio_community_posts` ON `bio_community_posts`.`group_id` = `bio_community_group_members`.`group_id`
WHERE `bio_community_posts`.`id` = '180'
AND `bio_community_posts`.`user_id` = '34'
1 голос
/ 21 июля 2011

Снимите `arround 180

 ON (`bio_community_posts`.`id` = 180)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...