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 :: Сложнейший SQL запрос

 PHP.SU

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


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

> Без описания
Bloodv1rus
Отправлено: 23 Мая, 2013 - 21:58:10
Post Id


Новичок


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


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




Здравствуйте уважаемые форумчане. Предо мной встала сложная задача вывода информации из бд. Помогите пожалуйста, если сможете...
[code=htmlphp][/code]Таблица с материалами, eu6xi_k2_items
-------------------------------- -------------------------------- -------------------------------- ----------------
|---id----|----title----|----catid----|----published----|introtext----|-------created-------|----created_by----|
|----1----|----title1---|------6------|--------1--------|----intro1---|-2012-09-18 17:01:39-|--------42--------|
|----11---|----title2---|------1------|--------1--------|----intro2---|-2012-09-19 17:01:39-|--------42--------|
|----13---|----title3---|------2------|--------0--------|----intro3---|-2012-09-20 17:01:39-|--------42--------|
|----23---|----title4---|------12-----|--------0--------|----intro4---|-2012-09-21 17:01:39-|--------42--------|
|----43---|----title5---|------5------|--------1--------|----intro5---|-2012-09-22 17:01:39-|--------44--------|
-------------------------------- -------------------------------- -------------------------------- ----------------

Таблица с подписанными категориями, podp_category
-------------------------------- -----------------
|----id_user----|----id_cat----|----sub_date----|
|------42-------|-------6------|---2013-05-23---|
|------41-------|-------6------|---2013-05-24---|
|------43-------|-------6------|---2013-05-25---|
|------42-------|------12------|---2013-05-26---|
|------42-------|------77------|---2013-05-27---|
-------------------------------- -----------------

Таблица с удаленными материалами, podp_delete
-------------------------------- -
|----user_id----|----item_id----|
|------42-------|------13-------|
|------18-------|------13-------|
|------23-------|------11-------|
|------42-------|------34-------|
|------49-------|------56-------|
-------------------------------- -


Таблица с пользователями, eu6xi_users
-------------------------
|----id----|----name----|
|----42----|---admin----|
|----43----|---VIRUS----|
|----44----|---ToCAs----|
|----45----|---sergey---|
-------------------------

Загружая страницу я знаю лишь айди пользователя. Допустим человек залогинен на сайте, и меет айди 42. И теперь нужно составить запрос так, чтобы человек увидел на странице только те материалы (eu6xi_k2_items), на которые он подписан. Материал должын быть опубликован (published=1) Увидить только те, которые позже появились чем он подписался (podp_category), исключить материалы которые он не хочет видеть (podp_delete). И подменить created_by из айди на реальное имя Грубо говоря нужно получить массив с следующими данными:
Array
(
[0] => Array
(
[0] => 1
[0] => title1
[0] => 6
[0] => 1
[0] => intro1
[0] => 2012-09-18 17:01:39
[0] => admin
)

)
 
 Top
LIME
Отправлено: 23 Мая, 2013 - 22:16:25
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT eu6xi_k2_items.id,title,catid,introtext,created,eu6xi_users.name FROM eu6xi_k2_items
  2.   JOIN podp_category ON id_user=$user_id AND catid=id_cat AND podp_category.sub_date<created
  3.   JOIN podp_delete ON podp_delete.user_id=$user_id AND item_id!=eu6xi_k2_items.id
  4.   JOIN eu6xi_users ON eu6xi_users.id=created_by
  5.  WHERE published=1
вроде ничего не забыл
 
 Top
Bloodv1rus
Отправлено: 23 Мая, 2013 - 22:37:48
Post Id


Новичок


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


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




LIME пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT eu6xi_k2_items.id,title,catid,introtext,created,eu6xi_users.name FROM eu6xi_k2_items
  2.   JOIN podp_category ON id_user=$user_id AND catid=id_cat AND podp_category.sub_date<created
  3.   JOIN podp_delete ON podp_delete.user_id=$user_id AND item_id!=eu6xi_k2_items.id
  4.   JOIN eu6xi_users ON eu6xi_users.id=created_by
  5.  WHERE published=1
вроде ничего не забыл


Хм, если в podp_delete Добавить одну запись - все работает как часики, если добавить вторую - результаты удваиваются. Тоесть если с пустой podp_delete в массиве 9 записей, добавив в podp_delete одну запись исключающую из массива айди - станет 8 записей, проделав подобную операцию еще раз - результатов будет 17..
 
 Top
LIME
Отправлено: 23 Мая, 2013 - 22:48:09
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




виноват-исправил
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT eu6xi_k2_items.id,title,catid,introtext,created,eu6xi_users.name FROM eu6xi_k2_items
  2.   JOIN podp_category ON id_user=$user_id AND catid=id_cat AND podp_category.sub_date<created
  3.   JOIN eu6xi_users ON eu6xi_users.id=created_by
  4.  WHERE published=1 AND eu6xi_k2_items.id NOT IN (SELECT item_id FROM podp_delete WHERE podp_delete.user_id=$user_id)

(Отредактировано автором: 23 Мая, 2013 - 22:51:09)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB