Вверх ↑
Этот топик читают: Гость
Ответов: 1528
Рейтинг: 57
#1: 2013-02-07 09:01:02 ЛС | профиль | цитата
есть 2 таблицы в 1-ой просто список строк с id, во 2-ой информация кому эти строки принадлежат и их порядок (int) при выдаче

нужно сделать сортировку при выдаче
т.е.
1 запрос смотрит общий список строк из 1-ой таблицы
2 запрос смотрит положение каждой строки и выполняет упорядочивание и отдаёт результат

как сделать?




карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#2: 2013-02-07 10:21:35 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-11 03:31:52
карма: 0

0
Ответов: 1528
Рейтинг: 57
#3: 2013-02-07 13:31:58 ЛС | профиль | цитата
уточнение:

Таблица 1
roller

id | type_roller | name_file | filepath | time_start | time_stop | period | user_id | tc_servers | timeRolik


Таблица 2
roller_priority

id | user_id | tc_id | roller_id | priority

+ текущая выборка из Табцицы 1
#sql
SELECT *
FROM roller
WHERE
time_stop >= '2013.02.05'
AND time_start <= '2013.02.05'
AND user_id = 1
AND (tc_servers LIKE '44;%' OR tc_servers LIKE '%;44;%' OR tc_servers LIKE '%;44' OR tc_servers = '44')

AND (period = 6 OR period = 3)
//*эта строчка подставляется в php*// //*либо AND (period = 6)*//

к этой выборке нужно прикрутить сортировку по второй таблице

из Таблицы 2 делать выборку строк по

roller | roller_priority
user_id == user_id
id == roller_id

на основе этого приклеить к Таблице 1 столбец priority и отсортировать по нему Таблицу 1
------------ Дoбавленo в 13.31:
уже не нужно, придумал как это обойти
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#4: 2013-02-07 15:52:38 ЛС | профиль | цитата
hitman249,
сравни время выполнения:

SELECT *
FROM roller
WHERE
time_stop >= '2013.02.05'
AND time_start <= '2013.02.05'
AND user_id = 1
AND (tc_servers LIKE '44;%' OR tc_servers LIKE '%;44;%' OR tc_servers LIKE '%;44' OR tc_servers = '44')
и
SELECT *
FROM roller
WHERE
(tc_servers LIKE '44;%'
OR tc_servers LIKE '%;44;%'
OR tc_servers LIKE '%;44'
OR tc_servers = '44')
AND time_stop >= '2013.02.05'
AND time_start <= '2013.02.05'
AND user_id = 1
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#5: 2013-02-07 21:59:31 ЛС | профиль | цитата
Tad, одинаково
но второй при "холодном" прогоне дольше упирался
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#6: 2013-02-07 22:21:46 ЛС | профиль | цитата
А сколько у тебя записей в таблице ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#7: 2013-02-08 06:53:01 ЛС | профиль | цитата
Tad, 3 записи раньше было 9
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#8: 2013-02-08 10:10:37 ЛС | профиль | цитата
Насмешил. Я думал 300 или 900
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#9: 2013-02-08 18:35:36 ЛС | профиль | цитата
последние для 3 меня мучает вопрос
как лучше в PHP+MySQL сделать хранение порядка сортировки списка песен по 3м факторам с возможностью его изменения:
  • по имени учетки
  • по n организации
  • по n времени (по факту списков которые по определённому времени начинают играть)
    в одной учетке может быть несколько организаций, на каждую организацию заведено по 2 списка роликов играющих поочерёдно в определённое время, по факту просто 2 списка. В которых нужно ввести возможность сортировки с учётом всего этого n-образия

    поскольку информация не конкретна и может меняться, лучше всего было использовать массив, но чуть позже выяснилось что в PHP кроме массива вообще ничего нет, это насколько я понял единственный способ структурировать данные, далее оказалось что считать ключ в массиве (тот который test: $var['test'] = 0; ) это вообще невиданный геморрой не только сложный неудобный но и тормозной.

    вообщем мне нужен способ хранить уникальную сортировку роликов на n количество плейлистов с простой возможностью считывания порядка и его изменения

    есть у кого какие идеи?
  • карма: 0

    0
    Ответов: 498
    Рейтинг: 39
    #10: 2013-02-08 19:42:59 ЛС | профиль | цитата
    hitman249 писал(а):
    PHP кроме массива вообще ничего нет

    Можно создать Паттерн Registry и хранит в нём данные например.
    эти данные являются временными или для хранения на долгое время?
    Поставь apc для ускорения выполнения скриптов если не установлен, используй memcached для кеширования в оперативную память частых запросов.
    ------------ Дoбавленo в 19.42:
    hitman249 писал(а):
    далее оказалось что считать ключ в массиве (тот который test: $var['test'] = 0; ) это вообще невиданный геморрой не только сложный неудобный но и тормозной.

    код в студию.
    карма: 0

    0
    Ответов: 16884
    Рейтинг: 1239
    #11: 2013-02-08 20:04:38 ЛС | профиль | цитата
    hitman249 писал(а):
    как лучше в PHP+MySQL сделать хранение порядка сортировки списка песен по 3м факторам
    хранить порядок песен в той же БД
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    0
    Ответов: 1528
    Рейтинг: 57
    #12: 2013-02-09 22:03:21 ЛС | профиль | цитата
    Tad писал(а):
    хранить порядок песен в той же БД

    ну так я и так храню, по крайне мере пытаюсь
    только всё сильно усложняет то что одни и теже песни в разных плейлистах и в разных организациях стоят в разном порядке
    у каждой организации по 2 плейлиста (по тз пока так, но есть риск что их количество будет динамически меняться)
    в каждом плейлисте свой порядок песен
    в одной учетке общие для всех организаций песни

    как структурировать данные о порядке, с нормальной возможностью добавлять, извлекать, изменять и удалять данные?

    Muz-Tv писал(а):
    код в студию.

    код на самом деле там один, и состоит всего из одного слова - имени функции для "поиска" всех ключей в массиве, и других способов как я понять выудить из массива ключ нет.
    карма: 0

    0
    Ответов: 16884
    Рейтинг: 1239
    #13: 2013-02-09 22:13:01 ЛС | профиль | цитата
    hitman249, пример на HiAsm тебя устроит ?
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    1
    Голосовали:hitman249
    Ответов: 1528
    Рейтинг: 57
    #14: 2013-02-09 22:52:10 ЛС | профиль | цитата
    Tad, да, суть то одна
    ------------ Дoбавленo в 22.52:
    Tad, но хотябы на SQLite
    нужно учитывать что сам PHP довольно дубовый и не гибкий
    и элементарные вещи для большинства языков порой на нём очень трудно сделать
    карма: 0

    0
    Ответов: 16884
    Рейтинг: 1239
    #15: 2013-02-09 23:50:07 ЛС | профиль | цитата
    code_30294.txt
    Блин, в FormatStr должно быть
    
    Add(FormatStr,3125105,728,434)
    {
    Mask="INSERT OR REPLACE INTO плейлист values(%1,'%2')"
    }
    ------------ Дoбавленo в 23.50:
    Во всяком случае алгоритм ты должен понять
    Если будет несколько плейлистов для одного предприятия, то нужно, после выбора предприятия, добавить комбобох в который запросом
    SELECT name,id FROM плейлист WHERE idpred=%1
    
    выводить список плейлистов этого предприятия. Т.е. у тебя должно быть
    Таблица ПЕСНИ
    id INTEGER PRIMARY KEY,
    name TEXT,
    path TEXT;

    Таблица ПРЕДПРИЯТИЕ
    id INTEGER PRIMARY KEY,
    name TEXT;

    Таблица ПЛЕЙЛИСТ
    id INTEGER PRIMARY KEY,
    name TEXT,
    spisok TEXT, -- сюда пишем id отобранных песен (например: '12,321,47,34,23')
    idpred INTEGER;
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    1
    файлы: 1code_30294.txt [3.8KB] [120]
    Голосовали:hitman249
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)