|
|
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, не могу понять, как правильно составить запрос по движению товара в магазине. Есть таблицы: приходный ордер p_invoice idp_invoicep_invoice_datep_invoice_description товары goods: idgoodsgoods_barcodegoods_namegoods_cost_zgoods_cost_pgoods_descriptiongoods_name связь многие ко многим между ними goods_has_p_invoice: id goods_idgoodsp_invoice_idp_invoicegoods_has_p_invoice_qtygoods_has_p_invoice_cost_zgoods_has_p_invoice_cost_p аналогично расходный ордер и таблица r_invoice, связь с goods goods_has_r_invoice и списание s_invoice, связь с goods goods_has_s_invoice Отчет за период, т.е есть 2 даты начала и конца периода В отчете должны быть : Остаток на начало остаток на конец приход за период расход за период Мои попытки: Первые 3 запроса чтоб узнать, последний записанный id до начала периода Код: php 1. 2. 3. 4. 5. 6. потом считаю приход расход и списание Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. Дальше чтоб узнать остаток на начало периода нужно вычесть из прихода расход и списание , но в расходе может не быть товара который есть в приходе, если он не продавался, после долгих раздумий пришел к такому Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Что выдает мне следующее: goods_idgoodsp_sumbegin_balance11.00 -11.0021.00 -10.00612.00 8.00121.00 0.001411.00 NULL Мне нужен только столбец begin_balance, но в нем последнее значение NULL а нужно 11.00 Помогите, Я пока не очень понимаю в сложных запросах, может, я вобще не в том направлении двигаюсь и можно все сделать проще.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 19:15:41 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
yasstrim, Не делайте сложные запросы. Во-первых, с производительностью будут проблемы. Во-вторых, баги никто не отменял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 19:50:52 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
Aleksandr Kuzminskyyasstrim, Не делайте сложные запросы. Во-первых, с производительностью будут проблемы. Во-вторых, баги никто не отменял А где ты там видишь сложные запросы-то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 00:51:25 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
yasstrimПервые 3 запроса чтоб узнать, последний записанный id до начала периодаНе стоит уповать на то, что ид всегда будут идти "по порядку" (читай хронологически). yasstrimЧто выдает мне следующее:Не верю. Вот ваш запрос в читабельном виде: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. и таки в выводе - всего одна колонка, а не три :) К тому же тут 2 раза считается одно и то же (под алиасом "pt"). Похоже, вы что-то не то сюда скопипастили. А вообще Код: sql 1. 2. 3. 4. 5. 6. PS. В мускле достаточно написать групбай, а ордербай нужен только если порядок сортировки отличается от порядка группировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 07:47:21 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
tanglir, Здравствуйте, спасибо за подсказку, сделал запрос, но уж очень он большой, может есть варианты, как его улучшить Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:15:32 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
1)всё такое Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. лучше сразу переписать как Код: sql 1. 2. 3. 4. 5. Насколько я понимаю, связь между p_invoice и goods_has_p_invoice - 1:М, так что на верность расчёта сумм это не повлияет. 2)Зачем вы считаете 3 показателя - "до from", "до to" и "между from и to"? Можно же посчитать 2, а третий вывести как сумму/разность. 3)"BETWEEN \.$obj->from.\ AND \.$obj->to. 23:59:59\" - лучше добавьте к obj.to 1 день и сделайте не битвин, а ">=" + "<". А то проапгрейдитесь до 5.6 и вылезут сюрпризы с дробными секундами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:42:23 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
tanglir, Спасибо огромное, все работает отлично, вроде все исправил. Неплохо знаю php, но с sql дальше простых запросов дело не доходило. А на php такой запрос был бы с кучей фореч, и огромным колличеством запросов к базе Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 15:05:07 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
yasstrim Код: sql 1. 2. Здесь ORDER BY можно смело исключить. GROUP BY уже сам по себе гарантирует сортировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 15:07:48 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
убрал ORDER BY по подсказке выше, все отлично спасибо!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 15:22:31 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
yasstrim, ну это...самое...того...инвойсы то что приход, что уход, они же одинаковые, одну таблицу достаточно... ну можно колонку тип_инвойса добавить. Ну и связачная таблица line_item будет одна, приход плюсом, расход минусом. Если часто просто инвенторию надо, то прикрутите дату инвойса к каждой goods_has_pr_invoice записи. Конечно не 4-ая форма, ну и фик с ней в результате весь ваш СКл будет иметь вид: select goods_idgoods, sum(goods_has_pr_invoice_qty) qty from goods_has_pr_invoice group by 1 having count(1) > 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 07:32:11 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
ну или типа как узнать инвенторию на начало месяца, конец месяца и делту: :date_start :date_end -- начало и конец месяца Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 07:39:00 |
|
||
|
запрос по движению товара из нескольких таблиц, очень сложный
|
|||
|---|---|---|---|
|
#18+
Это не сложный запрос, а просто большой. Когда нет потребности оперативно изменять входящие параметры, например сортировка и обильные фильтры не предусмотрены, то большой запрос можно порезать на несколько маленьких и собрать для вывода. В тексте несколько вхождений идентичных критериев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 13:07:06 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38569294&tid=1835191]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 297ms |

| 0 / 0 |
