Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена одного поля таблицы значнием из другого при 
:(
    Опции темы
different
Дата 3.4.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



Есть таблица user, в которой есть поля:
user_id
user_name

Также есть таблица news, в которой следующие поля:

news_id
news_author
news_title
news_body
news_date

Необходимо выбрать 20 последних записей из таблицы news, при этом поле news_author заменить назначение поля user_name, совпадающее по user_id и полем news_author/

Попробовал решить эту задачу при поможи INNER JOIN (год назад в примерно подобной ситуации прокатило в другом проекте). Составил вот такой запрос:
Код

SELECT u.user_id, u.user_name as user_name, n.news_author, date_format(n.news_date, '%d.%m.%Y')as 'news_date1', n.news_body AS news_body, n.news_title
FROM news AS n INNER JOIN user AS u ON u.user_id = n.news_author LIMIT 20


Но при выполнении данного запроса возвращается 0 строк.

Подскажите, плз, как правильно решить поставленную задачу. Версия MySQL - 5.0.45
PM MAIL   Вверх
skyboy
Дата 4.4.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



возможно, у тебя и нету совпадений news.news_author = user.user_id?  тип данных в означенных полях совпадает? числовой? если вдруг каким-то чудом - строковый, то какие charset?
кроме того, у тебя запрос не удовлетворяет условию 
Цитата(different @  3.4.2008,  20:43 Найти цитируемый пост)
20 последних записей
, потому как у тебя напрочь отсутствует сортировка по дате.
немного подкорректировав твой запрос, получаем
Код

SELECT `u`.`user_id`, `u`.`user_name`, date_format(`n`.`news_date`, "%d.%m.%Y"), `n`.`news_body`, `n`.`news_title`
FROM `news` AS `n`
INNER JOIN `user` AS `u`
ON `u`.`user_id` = `n`.`news_author`
ORDER BY `n`.`news_date`
LIMIT 20

впрочем, это все касаемо стиля и отказоустойчивости запроса(escaping при помощи обратных апострофов).
ответить на вопрос, почему же результат - ноль строк, не представляется возможным.
либо он и должен вернуть ноль строк, либо у тебя не  относящаяся к структуре запроса проблема, вроде указание не той БД или неверный вывод результатов запроса.

PM MAIL   Вверх
different
Дата 4.4.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



Про отсутсвие сортировки по дате в приведенном мной варианте я знал - просто для начала тестировал полный вывод данных из тестовой таблице. Если бы заработало - потом бы добавил сортировку и LIMIT 20 ( осеовном всегда так запросы строю, по частям).

По типам данных - всё нормально, оба поля (user.user_id и news.news_author) имеют одинаковый тип  'int(10)'.  Совпадающие данные есть, проверил не один раз.

Протестил на локальном сервере вараинт запроса, который ты мне написал - не работает. Все  так же возвращает 0. Протестил на хостинге (там тоже  версия мускуля 5.0.45), там отлично работает.

Придётся переставлять локальный сервер, видимо что-то при настройке недокрутил (или наоборот перекрутил).

Спасибо за помощь.
PM MAIL   Вверх
tolkien
Дата 5.4.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: нет
Всего: 4



Надо сделать так

SELECT n.news_author, 
(SELECT user_name FROM user WHEERE user_id = n.news_author) as user_name, 
date_format(n.news_date, '%d.%m.%Y')as 'news_date1', n.news_body AS news_body, n.news_title
FROM news n LIMIT 20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.