Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать выборку минимальным количеством запросов? / 5 сообщений из 5, страница 1 из 1
16.03.2015, 01:13:32
    #38905438
voffkamc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать выборку минимальным количеством запросов?
Доброго времени суток.
У меня есть 2 таблицы. Для наглядности упрощу:
SELECT * FROM company;
+----+-----------+
| id_comp | name |
+----+-----------+
| 1 | первая |
| 2 | вторая |
| 3 | третья |
+----+-----------+

SELECT * FROM description;
+----+----------------------------+
| id_comp | products |
+----+----------------------------+
| 1 | Икра заморская баклажанная |
| 1 | Диски литые урановые |
| 2 | жесткий диск неподъемный |
| 2 | жесткий диск с подогревом|
| 2 | кактус |
| 3 | Зелёная машинка |
+----+---------------------+

Необходимо на PHP по поиску товара, вывести сначала название компании, а затем список товаров.
В итоге по запросу "диск" должно выйти:
--------------------------------
первая
-Диски литые урановые
вторая
- жесткий диск неподъемный
- жесткий диск с подогревом

Пытался одним запросом с помощью JOIN сделать, но не знаю как без повторений вывести название 1 раз.
Перебирать предприятия и выводить только те, где количество продуктов не ноль - это ведь дергать вторую таблицу надо будет кучу раз - маразмом попахивает.
В общем подскажите оптимальный вариант.
...
Рейтинг: 0 / 0
16.03.2015, 04:50:10
    #38905462
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать выборку минимальным количеством запросов?
voffkamcПытался одним запросом с помощью JOIN сделать, но не знаю как без повторений вывести название 1 раз.Не пытайтесь заставить сервер выполнять работу клиента.
voffkamcВ итоге по запросу "диск" должно выйти:
--------------------------------

вторая
- жесткий диск неподъемный
- жесткий диск с подогревомНа самом деле по запросу "диск" должно выйти (от сервера):
группаназваниеперваяДиски литые урановыевтораяжесткий диск неподъемныйвтораяжесткий диск с подогревомА представить это в другом виде - работа клиента.
PS. Нет, конечно, можно нарисовать запрос, который выведет так, как вы хотите, но средствами скл это делать муторно. И потом хрен разберёшь, а что же этот запрос вообще делает.
...
Рейтинг: 0 / 0
17.03.2015, 13:20:11
    #38907012
voffkamc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать выборку минимальным количеством запросов?
Спасибо, сделал.
У меня в догонку еще один вопрос по структуре базы.

Есть системные сообщения, которые необходимо прочитать всем пользователям и соответственно ставить пометку "прочитано" или "удалить".
В голову приходит только заводить таблицу со столбцами id сообщений и каждого из пользователей. и соответственно значение 0/1/null т.е. непрочитано/ прочтано/ удалено, но здравый смысл подсказывает что это не самое верное решение.
...
Рейтинг: 0 / 0
17.03.2015, 13:35:48
    #38907046
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать выборку минимальным количеством запросов?
voffkamcВ голову приходит только заводить таблицу со столбцами id сообщений и каждого из пользователей. и соответственно значение 0/1/null т.е. непрочитано/ прочтано/ удаленоПочти так. Но запись для пары клиент/сообщение заносится только по факту просмотра. Нет записи - не смотрел. Есть запись - в зависимости от статуса просмотрено/удалено/прочее. Удаление - каскадно по факту удаления записи из таблицы сообщений.
...
Рейтинг: 0 / 0
17.03.2015, 14:25:47
    #38907149
black_height
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать выборку минимальным количеством запросов?
Akina,

Коротко и ясно. Спасибо огромное.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать выборку минимальным количеством запросов? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]