Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Связь таблиц

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
maragon
Отправлено: 06 Июля, 2011 - 15:09:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `lenta`.`n`,`lenta`.`n2`,`users`.`n`,`users`.`n2`,`users`.`login` FROM `lenta` LEFT JOIN `users` ON `users`.`n`=`lenta`.`n`

тут все понятно, а как мне соеденить второй номер (n2) с таблицей юзверей?
CODE (SQL):
скопировать код в буфер обмена
  1. `lenta`.`n`=`users`.`n`
  2. `lenta`.`n2`=`users`.`n`


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Мелкий Супермодератор
Отправлено: 06 Июля, 2011 - 15:32:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если не трудно - ещё раз, но со структурой таблиц и желаемым выводом.


-----
PostgreSQL DBA
 
 Top
maragon
Отправлено: 06 Июля, 2011 - 15:42:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




table >> users
----
n (int)
login (varch)
pass (varch)
----
table >> lenta
id (int)
n (int) - номер первой страницы пользователя
n2 (int) - номер второй страницы
do (int)
----
Скажем отправил подарок - у нас в таблицу лента идут данные:
insert into `lenta` (n,n2) values ...
n - мой номер.
n2 - номер страницы для которой отправил подарок.
----
Далее хочу вывести ленту активности.
пример:
Вася отправил подарок Пете
где Вася (n) , Петя (n2)
----
Если делать запрос как в 1м посте то выведу логин только Васи - не знаю как вывести логин (n2)


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Мелкий Супермодератор
Отправлено: 06 Июля, 2011 - 16:09:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `lenta`.`id`, `lenta`.`do`, `user1`.`login` AS `n`, `user2`.`login` AS `n2`
  2. FROM `lenta`
  3. LEFT JOIN `users` AS `user1` ON (`lenta`.`n`=`user1`.`id`)
  4. LEFT JOIN `users` AS `user2` ON (`lenta`.`n2`=`user2`.`id`)

(Отредактировано автором: 06 Июля, 2011 - 16:10:54)



-----
PostgreSQL DBA
 
 Top
maragon
Отправлено: 06 Июля, 2011 - 16:30:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Что-то прям не то .. ругается на ошибку в запросе.
Хотел спросить:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.                                         `mir_lenta`.`n`,
  3.                                         `mir_lenta`.`n2`,
  4.                                         `mir_lenta`.`date`,
  5.                                         `mir_lenta`.`time`,
  6.                                         `mir_lenta`.`uid`,
  7.                                                 `mir_users`.`login`,
  8.                                                 `mir_users`.`pol`
  9.                                         FROM `mir_lenta`
  10.                                                 LEFT JOIN `mir_users`
  11.                                                 ON `mir_users`.`n`=`mir_lenta`.`n`
  12.                                                         LEFT JOIN `mir_users`
  13.                                                         ON `mir_users`.`n`=`mir_lenta`.`n2`
  14.                                                 ORDER BY `mir_lenta`.`id` DESC

Почему промижуток запроса:
CODE (SQL):
скопировать код в буфер обмена
  1. LEFT JOIN `mir_users`
  2. ON `mir_users`.`n`=`mir_lenta`.`n2`
игнорится?? (выдаёт ошибку)


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Мелкий Супермодератор
Отправлено: 06 Июля, 2011 - 16:35:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




0) какую ошибку?
1) я неслучайно использовал алисы таблиц. Обратите внимание - они все разные.


-----
PostgreSQL DBA
 
 Top
maragon
Отправлено: 06 Июля, 2011 - 16:46:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Мелкий, не могли бы ли Вы мнедрилль алисы в мой запрос? пока с ними не дружу. Однако


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Slavenin
Отправлено: 06 Июля, 2011 - 16:47:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




использование конструкции LEFT JOIN в данном случае является не оправданным, maragon, вы уверены, что в таблице mir_users найдуться удовлетворяющие условию записи из mir_lenta и наоборот? если таковых не будет получите в соответсвующих полях значение NULL. Используйте INNER JOIN
maragon пишет:
Почему игнорится промежуток запроса:
ответ
Мелкий пишет:
использовал алисы таблиц. Обратите внимание - они все разные.
смысл в том, что повторно вы можете выбрать поля в том случае если зададите таблице алиас. в вашем же случае, вы выбираете одни и те же поля из одной таблицы, поэтому вам кажется что данный участок кода игнорируется

(Отредактировано автором: 06 Июля, 2011 - 16:49:28)

 
 Top
Мелкий Супермодератор
Отправлено: 06 Июля, 2011 - 17:30:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.                                         `mir_lenta`.`n`,
  3.                                         `mir_lenta`.`n2`,
  4.                                         `mir_lenta`.`date`,
  5.                                         `mir_lenta`.`time`,
  6.                                         `mir_lenta`.`uid`,
  7.                                                 `mir_users1`.`login` AS `loginn1`,
  8.                                                 `mir_users1`.`pol` AS `poln1`,
  9.                                                 `mir_users2`.`login` AS `loginn2`,
  10.                                                 `mir_users2`.`pol` AS `poln2`
  11.                                         FROM `mir_lenta`
  12.                                                 LEFT JOIN `mir_users` AS `mir_users1`
  13.                                                 ON `mir_users1`.`n`=`mir_lenta`.`n`
  14.                                                         LEFT JOIN `mir_users` AS `mir_users2`
  15.                                                         ON `mir_users2`.`n`=`mir_lenta`.`n2`
  16.                                                 ORDER BY `mir_lenta`.`id` DESC


-----
PostgreSQL DBA
 
 Top
maragon
Отправлено: 06 Июля, 2011 - 17:35:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Благодарствую. Буду учить аласы. Спасибо за примеры реализации. Закатив глазки


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB