![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
вроде ничего сложного, но что-то как в тупик попал
есть таблицы t1, t2, t3 и т.д. в них есть различные столбики с информацией, которую нам нужно выбрать, отсортировав по значениям соотв. столбиков в каждой таблице - sort1, sort2, sort3 и т.д. т.е. запрос там типа
проблема в том, что результат сортируется сначала по sort1, потом по sort2, по sort3 и т.д., а нужно так, чтоб при сортеровки эти поля были равноправны, т.е. если есть t1 sort1 ------ blablabla1 1 ------ ...data1.1... 2 ------ ...data1.2... 3 ------ ...data1.3... t2 sort2 ------ blablabla2 100 ------ ...data2.1... 4 ------ ...data2.2... 200 ------ ...data2.3... t3 sort3 ------ blablabla3 300 ------ ...data3.1... 1 ------ ...data3.2... 400 ------ ...data3.3... надо не 1 ------ ...data1.1... 2 ------ ...data1.2... 3 ------ ...data1.3... + 4 ------ ...data2.2... 100 ------ ...data2.1... 200 ------ ...data2.3... + 1 ------ ...data3.2... 300 ------ ...data3.1... 400 ------ ...data3.3... а вот так: 1 ------ ...data1.1... 1 ------ ...data3.2... 2 ------ ...data1.2... 3 ------ ...data1.3... 4 ------ ...data2.2... 100 ------ ...data2.1... 200 ------ ...data2.3... 300 ------ ...data3.1... 400 ------ ...data3.3... вроде доступно объяснил суть проблемы ![]() |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
а что содержится в таблицах, полях?
|
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
youri, инфа всякая... а какая разница?
![]() Добавлено через 1 минуту и 5 секунд соль в том, что в каждой табличке есть столбик (sort1, sort2, sort3 и т.д. для таблиц t1, t2, t3 и т.д. соотв.), по которому и нужно выполнять сортировку |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Разница такая, что задача уж больно странная. И, возможно, она решается другим запросом.
|
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
realPROme, ваш запрос не может дать такого результата как вы приводите в примерах. Определитесь что вам нужно получить -- join или union
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
или с другой организацией бд |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
вообще никак? union же будет создавать повышенную нагрузку при большом количестве таблиц? Добавлено через 4 минуты и 23 секунды solenko, упс, забыл ![]() там все намного сложней, проблема просто с сортировкой, там inner-ы с реальными условиями, а не "ON 1" Добавлено через 5 минут и 11 секунд каким? ![]() мне кажется что все несложно... туплю чего-то)) Это сообщение отредактировал(а) realPROme - 9.7.2009, 14:37 |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Странный диалог.
- какую задачу ты решаешь? - а какая разница? - возможно, она решается другим способом. - каким? Вообще-то, если логически поразмыслить, то бессмысленно спрашивать решение задачи, условия которой собеседнику неизвестны. Учитывая пассаж про юнион, и про большое количество таблиц, я даже предположить боюсь, что там на самом деле. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
realPROme, затык начинается с того уровня, что при соединении через JOIN поля в принципе не могут быть "равноправными при сортировке".
либо у тебя однотипные данные в разных таблицах, и тебе надо использовать UNION для обеъдинения данных с единой структурой. пример: товары разного типа, хранящиеся в разных таблицах, но из которых охота сделать один прайс-лист с сортировкой по цене. либо у тебя разноплановые данные и желание отсортировать по разным полям как по одному - непонятный каприз, не более. к примеру, чтоб значения номера парспорта было отсортировано наравне с фамилией. |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
"какая разница" - это касалось данных в таблицах, т.к. это не имеет отношения к вопросу под "возможно другим способом" - я имел в виду другой способ, а не другой путь решения просьба, кто может, помочь с решением поставленного вопроса, не более давайте просто считать, что вопрос чисто ради интереса задан - сможет ли кто-то найти его решение - да или нет Это сообщение отредактировал(а) realPROme - 9.7.2009, 15:30 |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
уже ответили
p.s. да, я невнимательно прочитал вопрос Это сообщение отредактировал(а) youri - 9.7.2009, 23:10 |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
спасибо, народ... странно, конечно, что нет обобщенной сортировки по нескольким рядкам, честно, очень странно, просто не сталкивался с этим раньше
![]() пока еще буду копать в этой стороне... |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
||||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
две записи:
и в каком порядке должна их вернуть "обобщенная сортировка" по столбцам column1 и column2? как можно, не представляя логики в своей голове, требовать что-то от машины? |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
skyboy, а что тут такого?
это ж, имхо, то же самое, что если сортировать таблицу по неуникальному полю, в котором есть дубли... |
|||
|
||||
lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 3 Всего: 14 |
если ничего такого отсортируйте таблицы которую привел skyboy
|
|||
|
||||
skyboy |
|
||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
аналогия ясна. усилим эффект:
в каком порядке будет идти результат "обобщенной сортировки" по column1 и column2? если порядок будет "101,102,103", то такой же эффект окажет "простая" сортировка по column1. если порядок "103,102,101" - то это эквивалентно сортировке по одному поле column2. если порядок "102,101,103" - то какой вообще смысл в подобной сортировке? с таким же успехом можно сортировать по случайному числу(order by rand()) Добавлено через 3 минуты и 44 секунды
вообще говоря, если сравниваются два атомарных значения, то значение понятия дубликата очевидно. так же не сложно выделить отношение "больше-меньше" но для кортежей если отношение равенства ещё почти очевидно("a b c" равно "c a b"?), то отношение "больше-меньше"(необходимое для реализации сортировки) лично для меня вообще скрыто в тумане. |
||||||
|
|||||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
||||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
realPROme, напиши алгоритм, потому что кроме тебя никто не знает, как сортировать "обобщенной сортировкой"
|
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
youri, какой тут может быть алгоритм?
я думал просто есть стандартные средства реализации такого невижу ничего диковинного - ведь такая сортировка даже в пределах одной таблицы может быть нужной |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
так они и не спрашивают про реализации, а про алгоритм. то есть, что ты понимаешь под обощённой сортировкой.
какой ответ должен быть в случаях с примерами? |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
column0 column1 column2 101 a c 102 b b 103 c a с этим? сортируется по некому временному columnX - который является объединением всех столбцов, а в чем проблема? алгоритм - к примеру, используя MEMORY таблицу в нее производится экспорт соотв. данных, где каждый рядок "column0 column1 column2 и т.д." соотв. переименовывается в columnX, далее обычная сортировка по нему и все готово, или я чего-то не понимаю, проблема в чем? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Двое суток ушло на то, чтобы выяснить, что у него все-таки юнион.
Добавлено @ 19:15 Впервые всnречаю человека, который так настойчиво сопротивляется решению своей задачи. Догадываюсь, впрочем, о причинах. Судя по всему, там настолько неоптимальная структура базы, что ее просто стыдно показать. Это сообщение отредактировал(а) Ипатьев - 11.7.2009, 19:50 |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
тут какбэ в тему, поэтому скажу. довольно много многих постов идут в не в духе предложения какого-то решения автору, а на проталкивание хода дискуссии в нужном направлении, в ходе которого она всё имеет шанс развиться к чему-то полезному. даже если я принципиально не знаю что ответить на сам вопрос. при этом, мне иногда приходится переводить не только вопросы авторам, но и ответы отвечающих. проше пани, пишите подробнее, не жалейте слов |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
||||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
||||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
это мне? я непонятно писал? вроде старался все расписать... вот надо что-то типа такого, только с учетом, что поля целочисленные, а не строковые... задача вообще какая: есть большой готовый проект, в рамках которого множество различных сервисов, соотв. - много различных таблиц, но в каждой из них есть некое поле - штамп времени события... вот по нему и надо выполнять сортировку - выбирать все события из десятка различных по структуре таблиц, сортируя по времени... |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
товарищи solenko и Ипатьев вполе конкретно говорили:тебе нужен union. ты же как мог открещивался и убеждал, что тебе нужен join. в итоге, озвучил-таки структуру(хоть и абстрактно, без кода). и вот решение:
и все. |
||||
|
|||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Это неправда. Реплики вида - говорят ровно о противоположном. Я согласен с bars80080, писать надо подробнее. Всего-то надо было написать три строчки из последнего сообщения. И тут же ему написали запрос. Зачем было в течение предыдущих трех дней устраивать представление - я не понимаю. |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
я писал что таблицы имеют абсолютно разные структуры, UNION не пройдет, во первых, а, во-вторых, загвоздка только в одном - в сортировке, где она в представленнов вами варианте? я прошу решить поставленный вопрос, а не искать другие пути решения если не можете мне помочь, прошу не по теме не писать и не фамильярничать |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
show create table для каждой таблицы, чтобы однозначно решить вопрос о применении или нет метода union
|
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
bars80080, для примера, пара таблиц
сортировать соотв. по: _posts.posted _fotos.fotos_date _notes.date Это сообщение отредактировал(а) realPROme - 12.7.2009, 20:16 |
|||
|
||||
skyboy |
|
||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
некоторые поля все же есть в каждой таблице: поле с датой для сортировки и ключевое поле(или поля) для однозначной идентификации. если у тебя настолько разная структура, что количество необходимых полей отличается, то можно: а) для всех таблиц, кроме тех, что с максимальным количеством полей, выводить вместо "недостающих" полей константы:
б) выбирать только идентификаторы + даты(в этом случае количество полей совпадает). затем отдельно для нужных идентификаторов выбирать допинформацию в зависимости от того, к какой сущности относится идентификатор И знаешь, я все ещё не могу понять: как ты собирался использовать JOIN, чтоб выбрать данные о разных сущностях с разной структурой хранения информации, но обработать(отсортировать) их однотипно.
т.е. "ORDER BY 1" в конце запроса это не сортировка по значению в первом по порядке поле? а что же это тогда? о_0
чтоб заявить "да, я действительно хочу одеть штаны на голову и мне пофиг, что это бессмысленно" не помешает привести хотя бы пару аргументов. ну, чтоб люди могли оценить: капризы это или насущная необходимость. |
||||||
|
|||||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
не вижну принципиальной проблемы - какая разница что за данные привязаны, сортировка же ведется по соотв. строчкам, а структура данных при JOIN обобщается, проблема только в реализации |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
при join данные не складываются, а умножаются.
ты бы попробовал что ли, сначала свой джойн на реальных данных, хотя бы и без сортировки. а потом уже тут разорялся. |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
Ипатьев, речь шла о структуре, а не о данных
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Это просто фантастика какая-то. Я впервые встречаю человека, который мало того, что не понимает того, чем занимается, но и постоянно спорит при этом.
Казалось бы - какая разница, о чем идет речь. Возьми, проверь и убедись, что твои представления о джойне катастрофически далеки от реальности. Но вместо этого какая-то странная отписка. Вообще удивительная складывается ситуация. Несколько человек терпеливо пытаются решить проблемы автора. При этом автор только и делает, что спорит. Я ошибаюсь, или таких людей в интернете называют словом "тролль"? Задача их не решить проблему, а устроить возможно более длинное обсуждение. |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
Ипатьев, я понимаю, что
выдаст id1 date1 id2 date2 id3 date3 1 1 3 3 5 5 2 2 3 3 5 5 1 1 4 4 5 5 2 2 4 4 5 5 1 1 3 3 6 6 2 2 3 3 6 6 1 1 4 4 6 6 2 2 4 4 6 6 и что с этого? тема вообще о сортировке - это единственное, что меня волнует знаете как отсортировать? если нет, ваши посты ничем не помогут |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Нет, не понимаешь. Сделай в этих таблицах хотя бы по 10 записей, а не по две.
У тебя же ведь в реальных таблицах будет не по две записи, и не по десять? Какой смысл в сортировке, если база и без нее умрет? |
|||
|
||||
realPROme |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 20.12.2006 Репутация: нет Всего: нет |
а какой смысл в вашем волнении? меня интересует лишь поставленный вопрос - сортировка, остальное это уже не ваши проблемы оки, тему можно считать закрытой, если кто сможет все же дать ответ на вопрос - буду очень благодарен этому человеку |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
и вот после того как ты все-таки ответил на мой вопрос, стало понятно, что тебе надо ;-)
ну хорошо, т.е. ты хочешь, чтобы строки из разных таблиц отсортировались по дате, используя JOIN, а не UNION? |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |