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 :: Легкий сложный SELECT

 PHP.SU

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


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

> Описание: Нужна правильная выборка из БД
hungel
Отправлено: 27 Апреля, 2013 - 21:01:23
Post Id


Новичок


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


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




Доброго времени суток.
Задача у меня до смешного простая, но как выяснилось решить ее не просто.
В панели пользователя нужно показать сколько у него непрочитанных сообщений, сколько черновиков новостей, сколько черновиков записей в блог и если админ, то сколько материалов на утверждение.

С php частью вроде все просто, берем массив полученный из базы и перебором массива смотрим чего нам надо показывать а чего нет.

Проблема как раз в массиве. Можно сделать 4 запроса и дело с концом, но хочется более быстрое решение и одним запросом. Выбрать все данные из базы без условий не проблема, но массив получается уж очень увесистый, потому нужно добавить условия выборки, вот тут и начинаются проблемы.
Вот что мы имеем.

Таблица с сообщениями ( Столбцы указываю только те которые нужно выбирать )
message_id | message_to | message_read

Таблица с новостями
news_id | news_user_id | news_publish

Таблица записей в блог аналогично новостям
blog_id | blog_user_id | blog_publish

Таблица утверждений, нужно просто узнать есть они или нет.
submit_id

Так вот, можно ли выбрать данные из всех этих таблиц с условием что message_to=$user_id, news_user_id=$user_id, blog_user_id=$user_id и message_read=0, news_publish=0, blog_publish=0 и собственно есть ли вообще submit_id

(Отредактировано автором: 27 Апреля, 2013 - 21:01:52)

 
 Top
LIME
Отправлено: 27 Апреля, 2013 - 21:24:00
Post Id


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


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


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




 
 Top
hungel
Отправлено: 27 Апреля, 2013 - 21:53:32
Post Id


Новичок


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


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




Дело в том что при использовании выборки типа
SELECT *
FROM A, B
WHERE a = c;

Можно указывать только общий WHERE для всей выборки и когда я указываю все нужные мне условия запрос ничего не возвращает, а сравнивать поля в таблицах мне и не нужно. Мне бы подошел UNION но тогда у меня вываливается из запроса submit_id потому что с помощью UNION можно выбирать только одинаковое количество столбцов, но и на этом проблемы не заканчиваются. Дело в том, что все данные помещаются в столбцы с названиями столбцов первой таблицы и как идентифицировать где новости, где блог, а где сообщения не понятно.

Про JOIN я тоже знаю и попробовал много разных вариантов, сейчас и не вспомню все, но нужного результат не добился.

(Отредактировано автором: 27 Апреля, 2013 - 22:03:18)

 
 Top
DeepVarvar Супермодератор
Отправлено: 27 Апреля, 2013 - 22:01:50
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Сделай четыре запроса, не парься - 5-10 простых запросов на страницу это не страшно.
 
 Top
hungel
Отправлено: 27 Апреля, 2013 - 22:07:50
Post Id


Новичок


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


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




На страницу может и не страшно, но у меня на странице уже 28 запросов, вот и пытаюсь оптимизировать. Это целых 4 запроса всего на одну панель, а если панелей больше, две, три, а если десять. По 4 запроса на панель уже 40 запросов только от панелей, а выборка новостей, рейтингов, структуры меню, настроек движка. Сервер то не резиновый, а если и резиновый (мощный) его возможности все равно не безграничны.

(Отредактировано автором: 27 Апреля, 2013 - 22:08:23)

 
 Top
DeepVarvar Супермодератор
Отправлено: 27 Апреля, 2013 - 22:11:37
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Значит ты что-то сделал не так.
У меня в админке щас самая "тяжелая" страница в 10 запросов.
(Добавление)
Блин - мускуль будет дольше "юнионить" чем ты четыре раза сходишь..
 
 Top
hungel
Отправлено: 27 Апреля, 2013 - 22:14:51
Post Id


Новичок


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


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




В админке и у меня 8, там и грузить особо нечему. Что за двиг с самой тяжелой страницей в 10 запросов? Это без кэширования?
 
 Top
DeepVarvar Супермодератор
Отправлено: 27 Апреля, 2013 - 22:15:27
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Без кеширования.
 
 Top
hungel
Отправлено: 27 Апреля, 2013 - 22:17:59
Post Id


Новичок


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


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




А двиг какой? Может есть смысл не изобретать велосипед, а использовать хорошо оптимизированный двиг.
 
 Top
DeepVarvar Супермодератор
Отправлено: 27 Апреля, 2013 - 22:18:50
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Это мой велосипед.
 
 Top
hungel
Отправлено: 27 Апреля, 2013 - 22:25:32
Post Id


Новичок


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


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




Вот и я свой пытаюсь изобрести. Просто пытаюсь учесть как можно больше вариантов и произвести оптимизацию. Делаю портал, там много всего и боюсь в 10 запросов уложиться ну никак не получится. Пытаюсь оптимизировать все что возможно. Потом еще прикручу кэширование, но двиг должен хорошо работать и без кэширования. Ушел спать, вернусь завтра.

(Отредактировано автором: 27 Апреля, 2013 - 22:28:19)

 
 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