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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2012, 12:59   #1
Green4el
Форумчанин
 
Регистрация: 16.04.2012
Сообщений: 146
По умолчанию 2 таблицы

Делаю фотоальбом. В таблице photo хранится вся инфа по фотографиям. В таблице album по альбомам.

PHP код:
$query "SELECT * FROM `photo` WHERE `uid` = '$uid'";
$result mysql_query($query)
        or 
trigger_error(mysql_errno() . ' ' 
            
mysql_error() . ' query: ' $sql);
 
if (
mysql_num_rows($result) > 0) {
    while (
$row mysql_fetch_assoc($result)) {
        echo 
"Альбом = {$row['album']} Название = {$row['name']} <br>";
    }
} else {
    echo 
'Fatal error';

Выводя список фотографий мне нужно выводить к какому альбому они относятся. Получается так:

PHP код:
$query "SELECT * FROM `album` WHERE `id` = '$album'"
Откуда я уже буду брать название альбома.

Вопрос: как совместить эти два запроса в одном?
Green4el вне форума Ответить с цитированием
Старый 26.12.2012, 13:40   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

есть LEFT JOIN

Код:
SELECT p.*, a.album FROM `photo` AS p LEFT JOIN `album` AS a ON p.id_album=a.id WHERE p.uid = '$uid'
примерно так... конечно при условии что у вас связь между таблицами есть )))
ADSoft вне форума Ответить с цитированием
Старый 26.12.2012, 14:15   #3
Green4el
Форумчанин
 
Регистрация: 16.04.2012
Сообщений: 146
По умолчанию

Сделал так:
Код:
SELECT * FROM `photo` LEFT JOIN `albums` ON photo.uid = albums.uid WHERE photo.uid = '$uid'
Количество выводит верное, но значения desc приходят пустые почему-то...
Green4el вне форума Ответить с цитированием
Старый 26.12.2012, 14:27   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

не неправильно сделал.... количество чего выводит? ваще чушь пишете .. .какое значение деск? вообще непонятно... почитай про LEFT JOIN
у вас - ON photo.uid = albums.uid ... каждой категории соответствует одна фотография? ... еще раз - должно быть поле связи фотографий и альбомов .. например id_album ...
ну и шедеврально берете * - а что это как это - не интересно? из какой таблицы брать7
ADSoft вне форума Ответить с цитированием
Старый 26.12.2012, 14:55   #5
Green4el
Форумчанин
 
Регистрация: 16.04.2012
Сообщений: 146
По умолчанию

Между альбомом и фотографией связь uid - идентификатор пользователя.
Про количество и правда мутно написал - у меня сейчас два альбома, в каждом две фотографии. При запросе выводит правильно - по две фотографии.
Desc - это название альбома или фотографии.
* - мне нужны все записи из двух таблиц.

Додумал только до такого:
Код:
"SELECT photo.*, albums.* FROM `photo` LEFT JOIN `albums` ON albums.uid = photo.uid WHERE photo.uid = '$uid'"
однако отображается все равно пустота

при этом var dump показал, что данные существуют и берутся правильно

Код:
var_dump (mysql_fetch_assoc($result));
может быть ошибка в выводе кроется?

Код:
echo "Альбом = {$row['albums.desc']} Название = {$row['photo.desc']} <br> {$row['photo.id']}";

Последний раз редактировалось Green4el; 26.12.2012 в 14:57.
Green4el вне форума Ответить с цитированием
Старый 26.12.2012, 15:04   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

ппц.. .у вас все что угодно может быть. Но самое главное вы неправильно спроектировали БД, или неверно нам объясняете. Нет у вас связи между альбомами и фотографиями..... например у пользователя с id=1 есть два альбома и по две фотографии в них ... КАК вы определите какая фотография в каком альбоме?
ADSoft вне форума Ответить с цитированием
Старый 26.12.2012, 15:16   #7
Green4el
Форумчанин
 
Регистрация: 16.04.2012
Сообщений: 146
По умолчанию

Код:
$query = "SELECT photo.*, albums.* FROM `photo` LEFT JOIN `albums` ON albums.id = photo.album WHERE photo.uid = '$uid'";
ошибся в ON

К скрипту приходит id (=uid) пользователя.
В таблице каждой фотографии есть поле uid и album.
id альбома равен album в таблице photo.

только это не работает...

возможно это ответит на некоторые вопросы:
Код:
CREATE TABLE IF NOT EXISTS `albums` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id альбома',
  `uid` int(11) NOT NULL COMMENT 'id пользователя',
  `desc` varchar(50) NOT NULL COMMENT 'название альбома',
  `order` int(11) NOT NULL COMMENT 'порядок альбома',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Структура таблицы `photo`
--

CREATE TABLE IF NOT EXISTS `photo` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id фотографии',
  `uid` int(11) NOT NULL COMMENT 'id пользователя',
  `album` int(11) NOT NULL COMMENT 'id альбома',
  `name` varchar(50) NOT NULL COMMENT 'имя файла',
  `desc` varchar(50) NOT NULL COMMENT 'название фотографии',
  `order` int(11) NOT NULL COMMENT 'порядок фотографии',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Фотографии пользователей' AUTO_INCREMENT=5 ;
Green4el вне форума Ответить с цитированием
Старый 26.12.2012, 15:39   #8
Green4el
Форумчанин
 
Регистрация: 16.04.2012
Сообщений: 146
По умолчанию

Нашёл проблему, не знаю как исправить.
Скрипт отклоняет повторные строки (desc, desc) оставляя одну. Поэтому photo.desc - это NULL, а desc - это описание альбома.
Green4el вне форума Ответить с цитированием
Старый 26.12.2012, 15:51   #9
Green4el
Форумчанин
 
Регистрация: 16.04.2012
Сообщений: 146
По умолчанию

Спасибо за помощь. Решил проблему переименованием строк
Green4el вне форума Ответить с цитированием
Старый 26.12.2012, 16:05   #10
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

не обязательно, можно переименованием строки в запросе... например
Код:
album.desc AS album_desc
ADSoft вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные из таблицы в список, если в ячейке таблицы стоит количество oleg_sh Microsoft Office Excel 4 08.10.2012 14:52
Макрос: заполнение таблицы данными из другой таблицы с автоматическим добавлением строк yevgeniy.demidov Microsoft Office Excel 6 06.09.2012 15:27
формирование таблицы из элементов другой таблицы с удалением повторяющихся значений Selicat Microsoft Office Excel 1 20.10.2011 22:36
Access ограничить значение поля таблицы значениями полей другой таблицы Сергей089 Microsoft Office Access 10 08.12.2010 02:22
Данные из двух полей исх. таблицы в одно поле сводной таблицы Strelec79 Microsoft Office Excel 2 02.08.2009 13:59