Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Помогите решить SQL задачу

"Обсуждение материалов сайта" и "Пожелания и критика" в одном флаконе.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
SlasT
phpBB 1.4.0
Сообщения: 36
Стаж: 19 лет
Откуда: www.shamanix.ru

Помогите решить SQL задачу

Сообщение SlasT »

есть запрос

Код: Выделить всё

$sql = 'SELECT t.topic_id, t.topic_title, t.topic_first_post_id, p.post_time, x.post_text 
	$sql = 'SELECT t.topic_id, t.topic_title, t.topic_first_post_id, p.post_time, p.subject_date, x.post_text 
      'WHERE t.forum_id NOT IN (' . $glance_ignore . ') ' .
      'AND p.topic_id = t.topic_id ' .
      'AND p.post_id = t.topic_first_post_id ' .
      'AND t.topic_moved_id = 0 ' .
      'AND x.post_id = t.topic_first_post_id ' .
      'AND t.topic_type = 2 ' .
      'ORDER BY t.topic_first_post_id DESC ' .
      'LIMIT ' . $glance_num_recent;
Ну здесь все понятно. Из базы выбираются объявления.
В таблице POSTS_TABLE есть поле subject_date куда при желании админа вставляется нужная дата (например 2005-12-31) или остается по умолчанию (0000-00-00).
Что нужно сделать: модифицировать условие так:
выбираются все объявления

Код: Выделить всё

'AND t.topic_type = 2 ' .

и добавить условие: все строки из базы с датой не равной 0000-00-00 но не обязательно что бы это было объявление.

Код: Выделить всё

'AND p.subject_date != "0000-00-00" ' .
как это сделать по отдельности понятно - просто заменить одну строку другой. А как это сделать что бы все обрабатывалось сразу.
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

так что мешает написать сразу оба этих условия... только насколько я помню, у меня не разу не сработало !=... а вот <> работает очень успешно...
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
SlasT
phpBB 1.4.0
Сообщения: 36
Стаж: 19 лет
Откуда: www.shamanix.ru

Сообщение SlasT »

если писать все вместе, то он (скрипт) будет искать объявления с subject_date не равным 0000-00-00.
А у меня в базе может быть объявление, но с нулями либо обычный пост, но с датой.
Вот и нужно искать или объявление или посты не с нулями.
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

а как насчет OR?
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
SlasT
phpBB 1.4.0
Сообщения: 36
Стаж: 19 лет
Откуда: www.shamanix.ru

Сообщение SlasT »

думал над этим. вот только правильно вставить не смог.
если после

Код: Выделить всё

'AND t.topic_type = 2 ' . 
вставить

Код: Выделить всё

'OR p.subject_date <> "0000-00-00" ' .
т.е.

Код: Выделить всё

$sql = 'SELECT t.topic_id, t.topic_title, t.topic_first_post_id, p.post_time, x.post_text 
   $sql = 'SELECT t.topic_id, t.topic_title, t.topic_first_post_id, p.post_time, p.subject_date, x.post_text 
      'WHERE t.forum_id NOT IN (' . $glance_ignore . ') ' . 
      'AND p.topic_id = t.topic_id ' . 
      'AND p.post_id = t.topic_first_post_id ' . 
      'AND t.topic_moved_id = 0 ' . 
      'AND x.post_id = t.topic_first_post_id ' . 
      'AND t.topic_type = 2 ' . 
      'OR p.subject_date <> "0000-00-00" ' .
      'ORDER BY t.topic_first_post_id DESC ' . 
      'LIMIT ' . $glance_num_recent;
то почему-то выводятся какие-то левые записи с одинаковым названием темы. Мне кажется что OR действует так же и на другие условия:

Код: Выделить всё

'WHERE t.forum_id NOT IN (' . $glance_ignore . ') ' . 
      'AND p.topic_id = t.topic_id ' . 
      'AND p.post_id = t.topic_first_post_id ' . 
      'AND t.topic_moved_id = 0 ' . 
      'AND x.post_id = t.topic_first_post_id ' . 
а мне нужно что бы ИЛИ было только к

Код: Выделить всё

 'AND t.topic_type = 2 ' . 
Добавлено спустя 4 минуты 14 секунд:

Может быть сделать еще один запрос с нужным мне условием?
Но тогда я не знаю как выполнить

Код: Выделить всё

$result = $db->sql_query($sql) or message_die(GENERAL_ERROR, "Could...
Добавлено спустя 12 минут 19 секунд:

Кстати говоря это Glance только с измененной выборкой.
[R: R@m$e$ :U]
если у вас установлен этот мод, то попробуйте вывести к примеру

Код: Выделить всё

'AND t.topic_type = 2 ' . 
- выбор объявлений
и

Код: Выделить всё

'AND t.topic_type = 1 ' . 
- выбор прилепленных тем одновременно в одну таблицу в темплейте. Если это получится значит и получиться должен мой вариант.
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

Код: Выделить всё

'AND ( t.topic_type = 2 OR p.subject_date <> "0000-00-00" ) ' .
я люблю daft punk | новый sugoi.ru
SlasT
phpBB 1.4.0
Сообщения: 36
Стаж: 19 лет
Откуда: www.shamanix.ru

Сообщение SlasT »

VVVas
Все заработало. Спасибо.

Вернуться в «Обсуждаем сайт и конференцию»