|
|
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Приветствую. Никак не могу написать как кажется один простой запрос. Может он сложный, а я упрощаю? Начну с дела. Есть две таблицы, одна таблица справочник, другая таблица наличие товара. В справочнике содержится информация о товаре и он является главным при определении наименования у товара. В таблице наличие товара хранится непосредственно информация о наличии товара, с указанием на товар(ПРОИЗВОДИТЕЛЬ и АРТИКУЛ) и соответственно наличие. Так же в этом поле есть наименование. Любой товар имеет обязательное поле ПРОИЗВОДИТЕЛЬ и АРТИКУЛ. В Справочнике может быть только 1 позиция с указанным ПРОИЗВОДИТЕЛЕМ и АРТИКЛЕМ, и может храниться наименование, а может и не хранится. В таблице наличие товара может быть несколько с одним и тем же ПРОИЗВОДИТЕЛЕМ и АРТИКЛЕМ и наименование может отличаться, как отсутствовать, так и значительно отличаться. Необязательно что товар который имеется в таблице наличие есть в таблице Справочник, так же как и наоборот. Вопрос стоит в следующем. Надо например найти товар с артикулом 123 и когда один производитель имеет указанный артикул, то проблем нету, а когда несколько разных производителей имеют указанный артикул, вот тут то и надо вывести СПИСОК возможных производителей, в месте с артикулом.... Тут то вопросов тоже нету, но вот проблема в том что надо вывести ещё и наименование. Причём по следующем правилам. Если наименование есть в справочнике, то вывести его, если его нету, то вывести первое наименование из списка Наличия. И так для каждого ПРОИЗВОДИТЕЛЯ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:02:08 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Опишу имена полей. Таблица Справочник Поля Id, Производитель, Артикул, наименование Таблица Наличие Id, Производитель, Артикул, наименование, количество ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:14:55 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Следующий запрос вроде выводит всё правильно, но берёт первое наименование которое попалось, и если оно NULL то не берёт следующее Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:20:29 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
авторСПИСОК возможных производителей Код: sql 1. авторЕсли наименование есть в справочнике, то вывести его, если его нету, то вывести первое наименование из списка Наличия Код: sql 1. зы с таким "подходом" к заданию вопроса, вам в литераторы нужно было идтить, а не запросы писать ... нуу, вот что может быть проще - показать несколько строк данных в виде таблицы, и показать какой результат на этих данных вы хотите получить, вместо этого "сочинения" ... ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:21:42 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Список возможных производителей с указанным артикулом не проблема, проблема в том чтобы с начало взять наименование из Справочника, а если его нет или оно равно NULL, то первое наименование из наличия (первое имеется в виду по ID). Опять же первое которое не NULL, так как оно и в справочнике может быть NULL и в Наличии может быть NULL Показывать все строки с разным наименованием при одном и том же артикуле и производителе не имеет смысла и не правильно, так как это один и тот же товар! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:28:28 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
qwerty112нуу, вот что может быть проще - показать несколько строк данных в виде таблицы, и показать какой результат на этих данных вы хотите получить, вместо этого "сочинения" ... ?? Если честно, то я не знаю как данные таблицы тут изобразить... :-) Наверняка есть клиенты где можно просто результат получить и показать, но у меня вроде такого клиента нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:33:36 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Кажется нашёл, сейчас по тестирую! 123456 5678910 1234565678910 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:35:28 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Отлично, сейчас тогда напишу в таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:36:22 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Таблица Spravochnik spr_id spr_producer spr_article spr_name1AAA001Наименование2BBB001NULL3DDD001Творог4EEE001NULL Таблица Nalichie nal_id nal_producer nal_article spr_name nal_kolvo1AAA001NULL72AAA001Молоко33BBB001Кефир домик в деревне54BBB001Кефир25CCC001Ряженка46CCC001NULL67CCC001Ряженка Вкуснотеево38FFF001NULL6 Соответственно результат должен быть следующий producerarticlenameAAA001НаименованиеBBB001Кефир домик в деревнеCCC001РяженкаDDD001ТворогEEE001NULLFFF001NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:49:42 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Без наименования Всё легко и просто, а вот с наименованием, по такой схеме возникают проблемы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:51:23 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
В таблице Nalichie поле spr_name прошу считать как nal_name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 16:55:19 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
АлександрLex, тут бы FULL JOIN очень пригодился бы ..., но так как его в МуСКЛ нет, то прийдётся через UNION Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 17:12:31 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Результат получился следующий: producerarticlenameAAA001НаименованиеBBB001КефирCCC001РяженкаDDD001ТворогEEE001NULLFFF001NULL Производитель BBB взял получается Последнее наименование, а правильно наверное говорить минимальное. Такой запрос у меня получался и делался немного по другому. Тут именно MIN и MAX дают не то что хочется, так как они отбирают минимальное и максимальное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 18:12:46 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
АлександрLex, Идеально сработал следующий запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но меня смущает LIMIT 1 в UNION... Срабатывает так как надо, возвращает одну строчку, первую, даже если в первом запросе и во втором запросе есть результат! Но я думал что он будет относиться только к тому запросу за которым он стоит, а не к обоим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 19:07:42 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Критика по данному запросу будет? Вроде запрос логичен, но кто что скажет... Интересует мнение! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2013, 19:22:08 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
АлександрLex, ещё раз, пожалуйста (для тех, кто не понял): - если наименование есть в справочнике то выводить его, независимо от тогоЮ есть ли какие-то другие наименования в "наличии" - если его в справочнике нет, то выводить наименование из "наличия" 1)порядок верный? 2)если в "наличии" несколько наименований, какое именно выводить? последнее по id? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2013, 14:57:05 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 08:25:44 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Забыл про LEFT JOIN Spravochnik :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 08:28:09 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
АлександрLex, Мужчина, может тебе сначала структуру базы слегка переделать, а потом уже запросы писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 11:50:53 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Нет смысла дрожать кривую бд и писарь на неё заумные запросы, они все равно не будут в конце концов работать, если таблицы чуть подрастут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 11:59:18 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
tanglirАлександрLex, ещё раз, пожалуйста (для тех, кто не понял): - если наименование есть в справочнике то выводить его, независимо от тогоЮ есть ли какие-то другие наименования в "наличии" - если его в справочнике нет, то выводить наименование из "наличия" 1)порядок верный? 2)если в "наличии" несколько наименований, какое именно выводить? последнее по id? 1) Если наименование есть в справочнике, то да, Выводить его, если в справочнике нет наименования, но есть позиция в наличии с наименованием, то брать первое попавшееся(с минимальным ID) наименование которое присутствует и не пустое, если позиция есть и в справочнике, и в таблице наличие, но наименование нету, то просто оставить его пустым(ну не от куда его взять). 2) Выводить первое по ID, если у него тоже нет наименование то следующее по ID, и т.д. Если пустое наименование у всех, то выводить эту позицию , без наименования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 14:44:53 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, а что именно предлагается прописать в структуре, что добавить? По моему структура и так проста и понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 14:46:00 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
АлександрLexMasterZiv, а что именно предлагается прописать в структуре, что добавить? По моему структура и так проста и понятна. Да не должно быть такого, чтобы в справочнике товаров не было наименования товара. Не должно быть такого, чтобы у товара был бы разные наименования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 15:03:46 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
Может быть, некоторые позиции, а особенно большинство добавляются автоматически при добавлении из разных внешних данных. Специфика такая что это необходимо... Единственное вопрос подтягивать может наименование , но данных действительно очень мого, несколько миллионов и поэтому это будет долго каждый раз подтягивать и проверять. По структуре лучше к сожалению не придумаешь... это практика показала... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 15:20:43 |
|
||
|
Простой или сложный запрос?
|
|||
|---|---|---|---|
|
#18+
АлександрLexСпецифика такая что это необходимо... Не бывает такой специфики, чтобы делать херню. Любую предметную область можно сделать хорошо, а можно сделать через жопу. В твоём случае имеет место не первое. Потому что в нормальной БД даже нужды в таких запросах не должно возникать. АлександрLexЕдинственное вопрос подтягивать может наименование , но данных действительно очень мого, несколько миллионов и поэтому это будет долго каждый раз подтягивать и проверять. По структуре лучше к сожалению не придумаешь... это практика показала... ЧТо подтягивать и проверять ? Товар из справочника? ЭТо один jOIN по индексу, это дёшево, никаких сложностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2013, 15:44:00 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1835819]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 351ms |

| 0 / 0 |
