Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пожалуйста, помогите с запросом

84K
27 августа 2012 года
maxbusko
2 / / 27.08.2012
Есть две базы данных. Одна с новостями другая с комментариями к новостям.
Не могу составить запрос что бы получить все новости и к каждой новости n комментариев.

Всем спасибо
445
28 августа 2012 года
Charley
176 / / 16.08.2011
Из первой ссылки, который дал google синтаксис sql запросов собрал это
SELECT новости FROM таблица_новости UNION SELECT комментарии FROM таблица_комментарии LIMIT n
84K
28 августа 2012 года
maxbusko
2 / / 27.08.2012
Цитата: Charley
Из первой ссылки, который дал google синтаксис sql запросов собрал это
SELECT новости FROM таблица_новости UNION SELECT комментарии FROM таблица_комментарии LIMIT n



Насколько я понимаю, UNION немного не то делает что нужно мне. wikipedia - union

мне нужен следующий результат после запроса:
массив состоящий из полей - титл, текст, и т. д., комментарии - тоже массив из n элементов (имя, текст, и т. д.), взятых из таблицы комментариев

445
28 августа 2012 года
Charley
176 / / 16.08.2011
Если тебе надо вернуть векторное произведение строк из двух таблиц, удовлетворяющее какому-то условию почитай тут Хотя по твоему посту я не могу понять, что тебе нужно.
1
28 августа 2012 года
kot_
7.3K / / 20.01.2000
Цитата: maxbusko

мне нужен следующий результат после запроса:
массив состоящий из полей - титл, текст, и т. д., комментарии - тоже массив из n элементов (имя, текст, и т. д.), взятых из таблицы комментариев


Тогда для каждого из - выбирай отдельным запросом комментарии

443
29 августа 2012 года
REmindER
292 / / 23.03.2003
Вопрос в СУБД. Как я понял, нужно "лимитированное" слияние таблиц. Для MySQL нашел похожий пример. На основании него сделал так:

 
Код:
SELECT rep_tab.id, rep_tab.title, com_tab.text
FROM report AS rep_tab
INNER JOIN comment AS com_tab
ON rep_tab.id = com_tab.report_id AND IF(@id = rep_tab.id, @rownum := @rownum + 1, @rownum := 1 + LEAST(0, @id := rep_tab.id)) <= ...N...,
(SELECT @rownum := 1, @id := 0) AS var_tab ORDER BY rep_tab.id ASC

Цитата:
комментарии - тоже массив из n элементов


Вряд ли такое возможно. Если требуется вывод, то придется отслеживать идентификатор новости (rep_tab.id) в очередной строке результата, что, впрочем, нетрудно, т.к. строки по нему и отсортированы.

412
29 августа 2012 года
grgdvo
323 / / 04.07.2007
Можно еще и так...

Пусть
1. Таблица НОВОСТИ (ИД, ТИТЛ, ТЕКСТ)
2. Таблица КОММЕНТАРИИ (ИД, НОВОСТЬИД, ДАТАВРЕМЯ, ТЕКСТ)

Создаем представление данных (CREATE VIEW) в виде всех пронумерованных комментариев по каждой новости; порядок нумерования определяется некоторым полем, например, есть такое поле ДАТАВРЕМЯ.

ТС! Вы не указали СУБД! Будет ХЗ-SQL, но должно работать везде.


 
Код:
CREATE OR REPLACE VIEW НУМЕРКОМЕНТАРИИ AS
  SELECT
    НК.ИД,
    НК.НОВОСТЬИД,
    НК.ДАТАВРЕМЯ,
    НК.ТЕКСТ,
    (SELECT COUNT(*) FROM КОММЕНТАРИИ AS К WHERE K.ДАТАВРЕМЯ <= НК.ДАТАВРЕМЯ AND К.НОВОСТЬИД=НК.НОВОСТЬИД) AS РАНК
  FROM
    КОММЕНТАРИИ AS НК;
Получили новое представление таблицы КОММЕНТАРИИ, где все записи каждой новости пронумерованный от 1 до N.
Остается самое простое выбрать.

Код:
SELECT
  Н.ИД,
  Н.ТИТЛ,
  Н.ТЕКСТ,
  НК.ИД,
  НК.ДАТАВРЕМЯ,
  НК.ТЕКСТ
FROM
  НОВОСТЬ AS Н,
  НУМЕРКОММЕНТАРИИ AS НК
WHERE
  Н.ИД = НК.НОВОСТЬИД AND
  НК.РАНК >= 1 AND НК.РАНК <= 5
ORDER BY
  Н.ИД,
  НК.ДАТАВРЕМЯ;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог