GeorgeGeorge
@GeorgeGeorge
Студент

Как сделать выборку, чтобы совпали значения двух таблиц, и вывести результат?

Имеются две таблицы mysql :
1) user_uploads
CREATE TABLE IF NOT EXISTS `user_uploads` (
  `upload_id` int(9) NOT NULL AUTO_INCREMENT,
  `image_name` text NOT NULL,
  `user_id_fk` int(11) NOT NULL,
  `created` int(11) NOT NULL,
  PRIMARY KEY (`upload_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

2) user_walls
CREATE TABLE IF NOT EXISTS `user_walls` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `message` text COLLATE utf8_unicode_ci NOT NULL,
  `date` datetime NOT NULL,
  `images` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;

В таблицу user_walls в строку images записываются через запятую upload_id(из таблицы user_uploads)
Как сделать выборку из этих двух таблиц так, чтобы совпали значения:
upload_id(где upload_id = image_name) == images, и вывести значения таблицы user_walls вместе с загруженными файлами из таблицы user_uploads
  • Вопрос задан
  • 2969 просмотров
Решения вопроса 1
Sander_Li
@Sander_Li
Backend developer
Лучше изменить архитектуру
SELECT * FROM user_walls AS uw
JOIN user_uploads AS uu
ON uw.images REGEXP '[[:<:]]' || uu.upload_id || '[[:>:]]'
WHERE uw.id = 1

В подобном случае отсутствует возможность использования индексов, например
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@t0di
По-правильному вариант с такой архитектурой таблицы не приемлем. Если конечно таблицы маленькие и рост не планируется, то можно закрыть а это глаза. А вообще есть 2 варианта:
1. вводить третью связующую таблицу.
2. в таблице user_uploads добавить поле wall_id
Лично я бы выбрал второй вариант, тогда получение всех картинок делается одним left join.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы