|
|
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Есть три таблице в article лежать статьи, в author лежат авторы, в article_author какой автор написал статью article num | title _____________ 1 | статья1 2 | статья2 3 | статья3 author num | title | letter ___________________ 1 | автор1 | А 2 | автор2 | Г 3 | автор3 | Б article_author author | article _____________ 1 | 1 1 | 3 3 | 3 Сперва должно вывести все статьи, сортировка по "letter" алфавиту авторов, а потом статьи у которых нету авторов Должно вывести: статья1, статья3, статься2(у статьи 2 нету автора, она выводиться последняя) select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter выводит: статья1, статья3 а вот вывести статью 3 не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 11:24:30 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Перепутал выводит: статья1, статья3 а вот вывести статью "2" не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 11:38:16 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Если необходимо получить записи, для которых нет соответствия в другой таблице, следует использовать стороннее связывание (LEFT JOIN). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 12:23:45 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 12:34:24 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Написал запрос (select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter) UNION ALL (SELECT article.* FROM article LEFT JOIN article_author ON (article.num=article_author.article) WHERE article_author.article IS NULL) По отдельности: 1 запрос выводит все заметки и сортирует по авторам (А,Б,В....) (выводит правильно) 2 запрос выводит все заметки у которых нету авторов (выводит правильно) а вот как совмещаю эти два запроса непонятно как сортирует, в чем может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 14:46:49 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
antonDevНаписал запрос (select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter) UNION ALL (SELECT article.* FROM article LEFT JOIN article_author ON (article.num=article_author.article) WHERE article_author.article IS NULL) По отдельности: 1 запрос выводит все заметки и сортирует по авторам (А,Б,В....) (выводит правильно) 2 запрос выводит все заметки у которых нету авторов (выводит правильно) а вот как совмещаю эти два запроса непонятно как сортирует, в чем может быть проблема? SUPER HACK (select * from table where field <> "" order by field) UNION (select * from table) что выведет??? в твоем случае - всё верно.что значит фраза не понятно как сортирует...у тебя в выводе три записи - ты не можешь увидеть вкаком они порядке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 14:57:26 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Блин)) выводит правильно с данными которые я написал в самом начале а вот с реальной БД не получаеться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 15:39:42 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
antonDev, а вы "SUPER HACK" в начало запроса прописали? Если серьёзно, то дело может быть в union ALL. Хотя не зная, что конкретно "не получаеться" (повбывав бы(с)), точно сказать ничего нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 17:04:05 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
tanglirantonDev, а вы "SUPER HACK" в начало запроса прописали? Если серьёзно, то дело может быть в union ALL. Хотя не зная, что конкретно "не получаеться" (повбывав бы(с)), точно сказать ничего нельзя. я проверял..в его случае юнион олл или юнион не влияют на результат...тоже подумал - мало ли...может без ОЛЛ оно не делает отдельно сортировку первого запроса.... вообщем без разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 18:07:13 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
antonDevБлин)) выводит правильно с данными которые я написал в самом начале а вот с реальной БД не получаеться так мы сдесь соритруем по букве, в выводе которой нету - может в реальной базе там немного не то что вы думаете??? нул например, пустая строка, или буква но не первая автора... и вам кажеться что не верно отработала сортировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 18:09:39 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Вот этот запрос 1 select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter выводит как должно, сначала статья с автором А, статья с автором Б, статья с автором В А с этим запросом 2 (select DISTINCT article.* FROM article,author,article_author WHERE article_author.article=article.num AND author.num=article_author.author ORDER BY author.letter) UNION ALL (SELECT article.* FROM article LEFT JOIN article_author ON (article.num=article_author.article) WHERE article_author.article IS NULL) Выводит статья с автором Б ,сначала статья с автором А, статья с автором В, потом все статьи без автора, хотя должно выводить как с запросом 1 сперва А,Б,В, потом без автора, получается не сортируется по алфавиту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 18:43:23 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
тю...мы все дружно провтычили, что у одной статьи, несколько авторов !!! дистинкт убирает дубли, но не гарантирует что во время сортировки, возмёться имено первое. ИБО СНАЧАЛА ОТРАБАТЫВАЕТ ДИСТИНКТ (секция селект) А ПОТОМ СОРТИРОВКА Код: plaintext 1. 2. 3. 4. если бы ордер бай первее секции селект обрабатывался, как бы выполнился этот запрос!!! ЗЫ типо предупреждаю возможную реплику о не логичности поведения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 19:08:51 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
что делать 0) решить каким образом сортировать статьи, если авторов несколько! например давай так - брать автора с большим айди 1) тогда из таблицы связующей и авторов, получить таблицу где будет связь только с одним автором! Код: plaintext 1. 2. 3. и её использовать у себя, вкачестве таблицы связи если брать автора с большей буквой, 2) тогда как выше берём связь таблиц связи , авторы, и налогично получаем таблицу авторы+связи, притом что на один айдишник, приходиться один автор как это сделать ---см в фак в ветке, как выбрать первую последнюю запись в групах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 19:16:18 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, alex564657498765453ИБО СНАЧАЛА ОТРАБАТЫВАЕТ ДИСТИНКТ (секция селект) А ПОТОМ СОРТИРОВКАкхм... http://dev.mysql.com/doc/refman/5.0/en/union.html However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. Therefore, the use of ORDER BY in this context is typically in conjunction with LIMIT, so that it is used to determine the subset of the selected rows to retrieve for the SELECT, even though it does not necessarily affect the order of those rows in the final UNION result. If ORDER BY appears without LIMIT in a SELECT, it is optimized away because it will have no effect anyway. To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 05:32:34 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
tangliralex564657498765453, alex564657498765453ИБО СНАЧАЛА ОТРАБАТЫВАЕТ ДИСТИНКТ (секция селект) А ПОТОМ СОРТИРОВКАкхм... http://dev.mysql.com/doc/refman/5.0/en/union.html However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. Therefore, the use of ORDER BY in this context is typically in conjunction with LIMIT, so that it is used to determine the subset of the selected rows to retrieve for the SELECT, even though it does not necessarily affect the order of those rows in the final UNION result. If ORDER BY appears without LIMIT in a SELECT, it is optimized away because it will have no effect anyway. To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one. интересная вещь...а я и незнал. проверил по плану запроса, действительно без лимита не используеться filesort, а с лимитом используеться. кхм... - это что??? ЗЫ молодца, когда ТС исправил бы ошибку с двоякостью автора для статьи, нарвался бы на этот момент. смотришь в будущие Тангир ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 11:30:55 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
alex564657498765453кхм... - это что???это покашливание а от удивления оно или намекающее - решать вам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 11:55:28 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Я все правильно написал, у статьи может быть два автора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 14:35:12 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
antonDevЯ все правильно написал, у статьи может быть два автора да но не написал, чью букву надо брать для сортировки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 16:03:52 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Также по алфавиту, сперва А потом Б Просто в запросе (2) где два запроса, не сортирует по полю letter, отдельно запрос (№1 выборка статей с авторами) срабатывает, а вот когда их совмещаю то похоже не срабатывает ORDER BY author.letter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:12:24 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
antonDevТакже по алфавиту, сперва А потом Б Просто в запросе (2) где два запроса, не сортирует по полю letter, отдельно запрос (№1 выборка статей с авторами) срабатывает, а вот когда их совмещаю то похоже не срабатывает ORDER BY author.letter невнимательный барин, что значит сперва А потом Б , если мы статьи выводим а не авторов. есть статья с авторами А и В и статья с автором Б, первая должна ити до или после??? типо автор с буквой А важнее автора с буквой В?? а на не срабатывание уже ответили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:35:01 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Да, автор А важнее автора Б ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:45:14 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
alex564657498765453есть статья с авторами А и В и статья с автором Б, первая должна ити до или после??? типо автор с буквой А важнее автора с буквой В??В реальных задачах (а эта явно учебная) авторы имеют свой порядок применительно к каждой книге. И сортировка, например, картотек происходит по их ФИО именно с учетом этого порядка. Т.е. о ФИО первого автора. При их равенстве - по ФИО второго. И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:48:25 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, все получилось)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:49:31 |
|
||
|
Выборка из ДБ
|
|||
|---|---|---|---|
|
#18+
antonDevДа, автор А важнее автора БВы так и не понял вопрос. Например, если одну книгу написали Ворошилов и Антонов, а другую - Баранов. То какая книга должна идти раньше и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:50:13 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38693756&tid=1834525]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 356ms |

| 0 / 0 |
