Difference between revisions of "VbzCart/queries"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search
(→‎qryCbx_Items: QtyMin_Stk)
(→‎new queries: many more queries no longer in db)
 
(220 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
[[VbzCart]]: [[VbzCart data views|data views]]
 
[[VbzCart]]: [[VbzCart data views|data views]]
 
==Overview==
 
==Overview==
"Views" in [[MySQL]] are like SELECT "queries" in [[MS Access]], i.e. they pull data from existing tables and are themselves usable as data sources in much the same way that tables are (and in which result sets from functions are not).
+
What [[MS Access]] calls "queries" are called "views" in [[MySQL]], i.e. they pull data from existing tables and are themselves usable as data sources in much the same way that tables are (and in which result sets from functions are not).
==Views==
+
 
 
Some common prefixes:
 
Some common prefixes:
 
* '''qryCbx_''': queries used for filling comboboxes. The unique ID will always be the first field, and the text to display will always be the second field; additional fields may be provided for use in further '''qryCbx_''' queries which show a subset of the results.
 
* '''qryCbx_''': queries used for filling comboboxes. The unique ID will always be the first field, and the text to display will always be the second field; additional fields may be provided for use in further '''qryCbx_''' queries which show a subset of the results.
 
* '''qryCat_''': queries which build catalog numbers or information by joining multiple tables. (In Access, the convention was '''qryCatNum_'''.)
 
* '''qryCat_''': queries which build catalog numbers or information by joining multiple tables. (In Access, the convention was '''qryCatNum_'''.)
===qryCat_Depts===
+
==by category==
<mysql>CREATE OR REPLACE VIEW qryCat_Depts AS
+
===Inactive===
  SELECT
+
* [[/deprecated]]: queries we're trying to [[/discarded|get rid of]], once we're sure nothing uses them
    d.ID,
+
* [[/discarded]]: queries apparently no longer in use
    d.Name,
 
    d.Sort,
 
    d.CatKey,
 
    d.ID_Supplier,
 
    CONCAT_WS('-',s.CatKey,d.CatKey) AS CatNum
 
  FROM depts AS d LEFT JOIN suppliers AS s ON d.ID_Supplier=s.ID;</mysql>
 
===qryCat_Titles===
 
<mysql>CREATE OR REPLACE VIEW qryCat_Titles AS
 
  SELECT
 
    t.ID,
 
    t.Name,
 
    CONCAT_WS('-',d.CatNum,t.CatKey) AS CatNum,
 
    d.ID_Supplier,
 
    t.ID_Dept,
 
    t.DateAdded,
 
    t.RstkMin AS QtyMin_Rstk,
 
    t.Notes,
 
    t.Supplier_CatNum AS Supp_CatNum
 
  FROM titles AS t LEFT JOIN qryCat_Depts AS d ON t.ID_Dept=d.ID;</mysql>
 
===qryCat_Items===
 
<mysql>CREATE OR REPLACE VIEW qryCat_Items AS SELECT
 
  i.ID,
 
  i.ID_Title,
 
  (t.ID IS NOT NULL) AS TitleExists,
 
  t.ID_Supplier,
 
  i.PriceSell,
 
  i.PriceList,
 
  i.PriceBuy,
 
  i.CatNum,
 
  t.CatNum AS Title_CatNum,
 
  t.Name AS Title_Name,
 
  i.ID_ItTyp,
 
  i.ID_ItOpt,
 
  i.ItOpt_Descr,
 
  i.ItOpt_Sort,
 
  CONCAT(t.Name, IF
 
      (i.ItOpt_Descr IS NULL,'',CONCAT(
 
        ' (',i.ItOpt_Descr,')'
 
        )
 
      )
 
    ) AS Descr,
 
  i.Supp_CatNum,
 
  i.isForSale,
 
  i.isPulled,
 
  i.QtyMin_Stk,
 
  t.QtyMin_Rstk AS QtyMin_Rstk_Title
 
FROM cat_items AS i LEFT JOIN qryCat_Titles AS t on i.ID_Title=t.ID
 
ORDER BY t.ID IS NOT NULL, i.CatNum, i.ItOpt_Sort;</mysql>
 
  
* '''MySQL note''': Functions (or CONCAT, anyway) apparently do not like being separated from their opening parenthesis; it seems to resolve the function name as a field name, and (generally) will report that there is no such field.
+
===Catalog===
 +
* [[/qryCat_Depts]]
 +
* '''Title'''-centric:
 +
** [[/qryTitles_Item_info]]
 +
** [[/qryTitles_ItTyps_grpItems]]
 +
** [[/qryTitles_ItTyps_ItTyps]]
 +
** [[/qryTitles_ItTyps_Titles]]
 +
** [[/qryTitles_Imageless]] - titles with no active images
 +
** [[/qryCat_Titles]]
 +
** [[/qryCat_Titles_Item_stats]] -- item/stock statistics
 +
** [[/qryCat_Titles_Item_count]] -- simpler query for maintenance
 +
** [[/qryCat_Titles_web]]
 +
** [[/qryCbx_Titles]]
 +
* '''Item'''-centric:
 +
** [[/qryCat_Items_Stock]]: cat_items with stock info
 +
* '''ItTyp'''-centric:
 +
** [[/qryItTypsDepts_grpItems]]
 +
** [[/qryItTypsDepts_ItTyps]]
 +
* '''Image'''-centric:
 +
** [[/qryImgs_byTitle]]: Image info by Title
 +
* [[/qryCat_pages]]: maps http path info to catalog entities
 +
====Catalog Items====
 +
* [[/qryCbx_Items_data]]
 +
** [[/qryCbx_Items]]
 +
** [[/qryCbx_Items_active]]
 +
** [[/qryCbx_Items_for_sale]]
 +
** [[/qryCbx_Items_opt]]: abbreviated version for contexts where Title is already known
 +
* [[/qryItems_prices]]: what uses this?
 +
====Catalog Sources====
 +
* [[/qryCtg_Sources_active]]
 +
* [[/qryCtg_Items_updates]]
 +
* [[/qryCtg_Items_updates_joinable]]
 +
* [[/qryCtg_Items_active]]
 +
* <s>[[/qryCtg_build_sub]]</s>
 +
* <s>[[/qryCtg_build]]</s>
 +
* '''[[VbzCart catalog building|building]] process''':
 +
** [[/qryCtg_Items_forUpdJoin]]
 +
** [[/qryCtg_Upd_join]]
 +
** [[/qryCtg_src_dups]]
 +
** [[/qryCtgCk_dup_keys]]
  
===qryCbx_Items===
+
====Catalog Topics====
<mysql>CREATE OR REPLACE VIEW qryCbx_Items AS
+
* '''titles x topics''':
SELECT ID, Descr
+
** [[/qryTitleTopic_Titles]]: more title information
FROM qryCbx_Items_data;
+
** [[/qryTitleTopic_Topics]]: more topic information
 +
** [[/qryTitleTopic_Title_avail]]: title availability information
 +
===Ordering===
 +
====Carts====
 +
* [[/qryCarts_info]]
 +
** [[/qrySub_Carts_info_data]]
 +
** [[/qrySub_Carts_info_items]]
 +
====Customers====
 +
* [[/qryCustAddrs]]
 +
* [[/qryCbx_CustNames]]
 +
====Orders====
 +
* [[/qryCbx_Orders]]
 +
* [[/qryOrderLines_notPkgd]]
 +
* [[/qryOrders_Active]]
 +
* [[/qryOrderLines_Active]]
 +
* [[/qtyOrderItems_Active]]
 +
* [[/qry_PkgItem_qtys_byOrder]]
 +
* [[/qryOrdItms_Pkg_qtys]]
 +
* [[/qryOrdItms_open]]
 +
* [[/qryItms_open]]
 +
* [[/qryItms_to_restock_union]]
 +
* [[/qryItms_to_restock]]
 +
====Packages====
 +
* [[/qryPkgLines_byOrdLine_andItem]]
 +
* [[/qryOrdLines_PkgdQtys]]
 +
* [[/qryOrdLines_open]]
 +
* [[/qryOrders_Pulled]]
 +
* [[/qryPkgs_Pull_status]]
 +
* for reports:
 +
** [[/qryRpt_Pkg_Lines]]
 +
*** [[/qryPkgLines_qtys_done]]
 +
*** <s>[[/qryPkgLines_qtys_done_ord_sum]]</s> - not used
 +
** [[/qryRpt_Pkg_Trx]]
  
CREATE OR REPLACE VIEW qryCbx_Items_active AS
+
====Restocks====
SELECT ID, Descr
+
* '''all restock requests''':
FROM qryCbx_Items_data
+
** [[/qryRstks_info]]
WHERE NOT isPulled;
+
** [[/qryRstkReq_Item_Rcd_status]]
 +
** [[/qryRstkReq_Item_status]]
 +
*** [[/qryRstkReq_Item_status_Req_info]]
 +
*** [[/qryRstkReq_Items_expected]]: show only expected items
 +
** [[/qryCbx_RstkReq]]
 +
*** [[/qryRstkReq_by_status]]
 +
*** [[/qryRstkReq_by_PurchOrd]]
 +
* '''filtered by status''':
 +
** [[/qryRstks_active]]: not terminated = !(closed, orphaned or killed - see {{l/vc/term|restock/status}})
 +
*** [[/qryRstks_unsent]]: created but not ordered yet
 +
**** [[/qryRstkItms_unsent]]
 +
***** [[/qryRstkItms_unsent_for_order]]
 +
** [[/qryRstks_inactive]]: all the rest
  
CREATE OR REPLACE VIEW qryCbx_Items_data AS
+
====Shipping====
SELECT
+
* [[/qryPkgs_status]]
  i.ID,
 
  CAST(
 
    CONCAT(
 
      if(i.isPulled,
 
        CONCAT('!X '),
 
        ''
 
      ),
 
      if(i.CatNum IS NULL,
 
        CONCAT('#',i.ID,' (no cat#)')
 
        ,i.CatNum),
 
      if(i.Supp_CatNum IS NULL,
 
        '',
 
        CONCAT(' [',i.Supp_CatNum,']')
 
      ),
 
      if(i.isForSale,'',' *n/a*'),
 
      ' ',
 
      if(i.Descr IS NULL,'no description',i.Descr)
 
    ) AS CHAR
 
  ) AS Descr,
 
  i.isPulled,
 
  i.isForSale,
 
  i.ID_Title,
 
  i.CatNum,
 
  i.Supp_CatNum,
 
  i.PriceSell,
 
  i.QtyMin_Stk
 
FROM qryCat_Items AS i
 
ORDER BY NOT i.isPulled, i.isForSale, i.CatNum;</mysql>
 
  
* Future refinement: no need to display CatNum, Supp_CatNum, i.Descr if i.isPulled
+
===Stock===
* Added more fields for forms which want to display Descr from this query but also need those fields (e.g. Restock Items form):
+
====new queries====
** '''ID_Title''', '''CatNum''', '''PriceSell''', '''QtyMin_Stk'''
+
* [[/qryStk_Bins_w_info]]
* Added '''isPulled''' so qryCbx_Items_active can display only non-pulled items (less bandwidth = faster loading)
+
* [[/qryStk_lines_remaining]]
 +
** [[/qryStk_lines_remaining_byBin]]
 +
** [[/qryStk_lines_remaining_forSale]]
 +
*** [[/qryStkItms_for_sale]]
  
===qryCbx_Orders===
+
* [[/qryStk_items_remaining]]
<mysql>CREATE OR REPLACE VIEW qryCbx_Orders AS
+
* [[/qryStk_byItem_byBin]]
SELECT
 
  ID,
 
  CONCAT_WS(' due ',CAST(Number AS CHAR),DATE_FORMAT(WhenNeeded,'%Y-%m-%d')) AS Descr
 
FROM core_orders
 
ORDER BY Number DESC;</mysql>
 
===qryCbx_Restocks===
 
I don't know [[WTF]] is going on here. MySQL wouldn't let me create this as one big query (no error message, just "query cancelled"), so I tried to split it into two parts and union them -- but I get the same error message. For now, I'm just defining the subqueries in MySQL and the UNION in Access. :-P
 
<mysql>CREATE OR REPLACE VIEW qryCbx_Restocks_byStatus AS
 
SELECT
 
  r.ID,
 
  CAST(
 
    CONCAT(
 
      CAST(COALESCE(
 
        CONCAT('X ',DATE_FORMAT(r.WhenKilled,'%Y-%m-%d')),
 
        CONCAT('R ',DATE_FORMAT(r.WhenReceived,'%Y-%m-%d')),
 
        CONCAT('O ',DATE_FORMAT(r.WhenOrdered,'%Y-%m-%d')),
 
        CONCAT('D ',DATE_FORMAT(r.WhenDebited,'%Y-%m-%d')),
 
        CONCAT('C ',DATE_FORMAT(r.WhenCreated,'%Y-%m-%d'))
 
      ) AS BINARY),
 
      ' ',
 
      s.CatKey,
 
      IFNULL(CONCAT(' [',r.PurchOrdNum,']'),'')
 
    ) AS CHAR
 
  ) AS Descr,
 
  NOT IsLocked AS IsOpen,
 
  r.WhenOrdered,
 
  r.WhenReceived,
 
  r.WhenConfirmed,
 
  r.ID_Supplier
 
FROM core_restocks AS r LEFT JOIN cat_supp AS s ON r.ID_Supplier=s.ID
 
ORDER BY COALESCE(r.WhenKilled,r.WhenReceived,r.WhenOrdered,r.WhenDebited,r.WhenCreated);
 
  
CREATE OR REPLACE VIEW qryCbx_Restocks_byPurchOrd AS
+
* [[/qryStk_lines_Title_info]]
SELECT
 
  r.ID,
 
  CAST(r.PurchOrdNum AS CHAR) AS Descr,
 
  NOT IsLocked AS IsOpen,
 
  r.WhenOrdered,
 
  r.WhenReceived,
 
  r.WhenConfirmed,
 
  r.ID_Supplier
 
FROM core_restocks AS r WHERE r.PurchOrdNum IS NOT NULL
 
ORDER BY r.PurchOrdNum;
 
  
CREATE OR REPLACE VIEW qryCbx_Restocks AS
+
====old queries====
  SELECT * FROM qryCbx_Restocks_byStatus
+
This was the first batch of queries I created, before I had decided to go with the qry prefix as in Access.
UNION
+
* [[/v_stk_titles_remaining]]
  SELECT * FROM qryCbx_Restocks_byPurchOrd;</mysql>
+
* [[/v_stk_byItemAndBin_wItemInfo]]
===qryFrm_RestockLines===
 
<mysql>CREATE OR REPLACE VIEW qryFrm_RestockLines AS
 
SELECT
 
  ri.ID,
 
  ri.ID_Restock,
 
  ri.ID_Item,
 
  ci.CatNum,
 
  ci.Supp_CatNum,
 
  ci.PriceSell,
 
  ci.QtyMin_Stk,
 
  o.Number AS OrderName,
 
  ci.Descr AS ItemDescr,
 
  o.WhenNeeded,
 
  If(t.RstkMin = 1, '', t.RstkMin) AS RstkMinStr,
 
  ri.QtyOrd,
 
  ri.QtyNeed,
 
  ri.QtyExp,
 
  ri.InvcLineNo,
 
  ri.InvcQtyOrd,
 
  ri.InvcQtySent,
 
  ri.isGone,
 
  ri.QtyRecd,
 
  ri.QtyFiled,
 
  ri.CostExpPer,
 
  ri.CostInvPer,
 
  ri.CostInvTot,
 
  ri.CostActTot,
 
  ri.CostActBal,
 
  ri.Notes
 
FROM
 
(
 
  (rstk_lines AS ri
 
    LEFT JOIN core_orders AS o ON ri.ID_Order=o.ID)
 
  LEFT JOIN qryCbx_Items_data AS ci ON ri.ID_Item=ci.ID)
 
LEFT JOIN cat_titles AS t ON ci.ID_Title=t.ID;</mysql>
 
  
===qryFrm_RestockLines_byItem===
+
===Caching===
Basically the same as qryFrm_RestockLines, but grouped by ID_Item
+
Caching should only be used for catalog display.
 +
* [[/qryCache_Flow_Procs]]

Latest revision as of 23:12, 3 March 2016

Navigation

VbzCart: data views

Overview

What MS Access calls "queries" are called "views" in MySQL, i.e. they pull data from existing tables and are themselves usable as data sources in much the same way that tables are (and in which result sets from functions are not).

Some common prefixes:

  • qryCbx_: queries used for filling comboboxes. The unique ID will always be the first field, and the text to display will always be the second field; additional fields may be provided for use in further qryCbx_ queries which show a subset of the results.
  • qryCat_: queries which build catalog numbers or information by joining multiple tables. (In Access, the convention was qryCatNum_.)

by category

Inactive

Catalog

Catalog Items

Catalog Sources

Catalog Topics

Ordering

Carts

Customers

Orders

Packages

Restocks

Shipping

Stock

new queries

old queries

This was the first batch of queries I created, before I had decided to go with the qry prefix as in Access.

Caching

Caching should only be used for catalog display.