Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2017, 16:59   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
Вопрос Получить данные при отсутствии одного значения

Есть две таблицы
Код:
CREATE TABLE IF NOT EXISTS `users` (
  `uid` int(10) unsigned NOT NULL auto_increment,
  `nick` varchar(60) NOT NULL,
  PRIMARY KEY  (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
и
Код:
CREATE TABLE IF NOT EXISTS `public_messages` (
  `uid` int(10) unsigned NOT NULL auto_increment,
  `from` int(10) unsigned NOT NULL,
  `date` datetime default NULL,
  `message` varchar(2000) NOT NULL,
  PRIMARY KEY  (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Так получаю список сообщений
Код:
<?php
include "utils.php";
// Выводим последние 40 записей (в порядке добавления записей в таблицу)
$query = "SELECT * FROM (SELECT `tpm`.`uid`, `tusr`.`nick` AS `from`, `tpm`.`date`, `tpm`.`message`
       	 FROM `public_messages` AS `tpm`
         JOIN `users` AS `tusr` ON `tusr`.`uid` = `tpm`.`from`
		 ORDER BY `tpm`.`uid` DESC LIMIT 40) AS `a` ORDER BY `a`.`uid` ASC";
$result = mysql_query($query) or die ("ERROR: ".mysql_error());
if (mysql_num_rows($result) > 0) {
	while ($row = mysql_fetch_array($result)) {
		// Берём результаты из каждой строки
		echo $row['uid'].'~'.$row['date'].'~'.$row['from'].'~'.$row['message'].'!end-post'; // Выводим данные
	}
}
?>
Если в таблице пользователей нет никого с указанным uid
Код:
JOIN `users` AS `tusr` ON `tusr`.`uid` = `tpm`.`from`
То по PHP ничего не выводит. Можно как-то обойти этот момент? Если нет пользователя с указанным uid в таблице пользователей, то просто вывести этот id.
Примеры;
Всё есть:
1~2017-10-01 14:42:45~Roman~0!end-post
Нет такого пользователя
1~2017-10-01 14:42:45~1~0!end-post
Shouldercannon вне форума Ответить с цитированием
Старый 02.10.2017, 17:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

что-то у Вас в структуре криво организовано - раз есть записи с id во from, для которых нет записей в таблице users (как может пользователь, которого нет, отправить сообщение с id, которого нет).

но, впрочем, SQL легко позволяет получить подобный бред - замените оператор JOIN на LEFT JOIN
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2017, 19:12   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что-то у Вас в структуре криво организовано - раз есть записи с id во from, для которых нет записей в таблице users (как может пользователь, которого нет, отправить сообщение с id, которого нет).

но, впрочем, SQL легко позволяет получить подобный бред - замените оператор JOIN на LEFT JOIN
Знаю что бред, но такое требует задача. Благодарю за помощь в решении проблемы.
Shouldercannon вне форума Ответить с цитированием
Старый 02.10.2017, 21:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

всегда пожалуйста.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не использовать код при отсутствии файла meg8639 Microsoft Office Excel 2 09.12.2013 23:07
При выборе значения одного из трёх ComboBox выводить значение в Label TeliS Общие вопросы Delphi 2 23.09.2013 18:47
Восстановить правильные значения CMYK при изменение одного из значений hon Мультимедиа в Delphi 14 19.08.2012 13:43
Зависание программы при отсутствии подключения dolphin705 Работа с сетью в Delphi 0 17.01.2011 02:05
Изменение значений одного выпадающего списка, при измнении значения другого Ground Microsoft Office Access 5 07.09.2010 22:00