|
|
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
Есть 2 таблички: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Нужно сделать запрос, который вернет список всех песен по исполнителю. А также первое отсортированное значение (максимум или минимум, например) из таблицы t. Но может быть вариант, что в таблице t не будет связи для таблицы s (по-русски: нет текстов для песни). Тогда мы должны вместо id_text получить null. проще говоря вот такой запрос оптимизировать, точней переписать Код: plsql 1. 2. 3. 4. 5. 6. В моих реалиях 150 000 songs, по 5 текстов в среднем на 1 song запрос (который опубликован выше) выполняется 9 секунд, что ужасно для фронтенда. Помогите, пожалуйста, составить нормальный запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2013, 22:46:16 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
bobahvas, Непонятно зачем тянуть подзапросом значение максимума/минимума по рейтингу в 1 запросе. Выбрал все композиции исполнителя, отсортировал по рейтингу - в первой записи у тебя будет нужное максимальное/минимальное значение. 2-й вариант - отдельным запросом вытянуть MIN(t.rating)/MAX(t.rating) композиций определенного исполнителя. Оба варианта при наличии индексов будут достаточно быстрыми. То, что ты сейчас пытаешься делать, не нужно . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 13:36:10 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
MikkiMouse, Хотелось бы пример под ваши слова. 2-й вариант не подходит. На 1 странице может быть около 400 песен. Т.е. 1 запрос на получение всего списка песен из таблицы songs и потом 400 запросов на получение минимума (или максимума) из таблицы texts 1-й вариан предполагает, что результат выборки будет таким: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Что тоже "не есть хорошо". Хотелось бы получить 1 запросом резальтат: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 14:26:05 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
bobahvas, Значит Вы не можете толком объяснить чего хотите. Исходя из приведенного результата, выборка может быть например такой: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 15:58:04 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
MikkiMouse, абсолютно не таким. Я написал четко. Берем все песни, к ним добавляем id_text из таблицы texts. Причем не просто какое-то, и не мин мах id_text. А max(texts.rating). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 18:53:42 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
По-русски: Выбрать все песни, добавить к ним id самого популярного текста. Если текстов нет - поставить null. Думаю так ясно будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 18:55:23 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
bobahvasПо-русски: Выбрать все песни, добавить к ним id самого популярного текста. Если текстов нет - поставить null. Думаю так ясно будет http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 19:16:02 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
javajdbc http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah Спасибо, это более продуктивно. Однако отработало не так как я планировал. Пример: У меня 3 пользователя, 2 пользователя имеют посты с оценками. У 1 нет постов. В итоге 3 пользователь не попал в выборку, хотя в моем случае должен со значением null. Сможете подсказать как изменить тот запрос для моего случая (использовал С1 по ссылке выше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 20:09:30 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
bobahvas, >> как изменить тот запрос для моего случая добавить LEFT перед жоинтами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 20:30:24 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
javajdbc, если сделать это с с1 - то не получится. взял за основу с3 с лефт джойном, все работает. Всем спасибо за помощ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 20:39:08 |
|
||
|
Помогите оптимально составить запрос
|
|||
|---|---|---|---|
|
#18+
bobahvasВ моих реалиях 150 000 songs, по 5 текстов в среднем на 1 song запрос (который опубликован выше) выполняется 9 секунд, что ужасно для фронтенда. SELECT * FROM songs s, texts t WHERE s.id_song = t.id_song умножит N текстов на 1 сонгу. Нет лирики (если юзаете английский, то текст песни - lyrics) у сонги - результат неизвестен, NULL. Насколько я понимаю часть запроса - группировка GROUP BY по рейтингу и агрегатная функция типа MAX к группе. http://www.techonthenet.com/sql/group_by.php Если выкинуть поле типа text из таблицы texts он станет чистой таблицей rating. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 21:51:54 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=219&tid=1836497]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 327ms |

| 0 / 0 |
