Autor Zpráva
lopik
Profil
Dobrý deň prajem, s prácou v databázy som pomerne neskúsený a potreboval by som pomôcť. Mám kód
SELECT * FROM zceuiqvirtuemart_order_items i
                LEFT JOIN zceuiqvirtuemart_products p
                ON p.virtuemart_product_id = i.virtuemart_product_id


LEFT JOIN `zceuiqvirtuemart_product_manufacturers` ON (i.virtuemart_product_id = `zceuiqvirtuemart_product_manufacturers`.`virtuemart_product_id`)

LEFT JOIN `zceuiqvirtuemart_manufacturers_sk_sk` as m ON m.`virtuemart_manufacturer_id` = `zceuiqvirtuemart_product_manufacturers`.`virtuemart_manufacturer_id`

LEFT JOIN zceuiqvirtuemart_product_categories as pcat ON p.product_parent_id = pcat.virtuemart_product_id

LEFT JOIN zceuiqvirtuemart_categories_sk_sk as cat ON pcat.virtuemart_category_id = cat.virtuemart_category_id

where i.virtuemart_order_id=7392

Keď dám tento dopyt vypísať, tam mi riadky zduplikuje, preto by som ich chcel pomocou riadku
group by i.virtuemart_order_id

to dať nejak dokopy, avšak mysql mi hlási chybovú hlášku a ja sa neviem pohnúť ďalej. viete mi prosím pomôcť ako by som to mohol vyriešiť? Ďakujem
Kajman
Profil
Pokud jsou produkty ve více kategoriích, tak chcete co?
lopik
Profil
Kajman:
Dobrý deň, v tomto prípade by som chcel zobrazovať len jednu kategóriu.
Kajman
Profil
Je na serveru verze db podporující window funkce?
lopik
Profil
Beží to na MySQL 8.0, neviem či Vám taká info stačí
Kajman
Profil
Ta verze by je už měla umět. Třeba půjde něco takového
SELECT *
FROM
  (SELECT i.*,
          p.*,
          m.*,
          cat.*,
          ROW_NUMBER() OVER(PARTITION BY i.virtuemart_order_item_id) AS poradi
   FROM zceuiqvirtuemart_order_items i
   LEFT JOIN zceuiqvirtuemart_products p ON p.virtuemart_product_id = i.virtuemart_product_id
   LEFT JOIN `zceuiqvirtuemart_product_manufacturers` ON i.virtuemart_product_id = `zceuiqvirtuemart_product_manufacturers`.`virtuemart_product_id`
   LEFT JOIN `zceuiqvirtuemart_manufacturers_sk_sk` AS m ON m.`virtuemart_manufacturer_id` = `zceuiqvirtuemart_product_manufacturers`.`virtuemart_manufacturer_id`
   LEFT JOIN zceuiqvirtuemart_product_categories AS pcat ON p.product_parent_id = pcat.virtuemart_product_id
   LEFT JOIN zceuiqvirtuemart_categories_sk_sk AS cat ON pcat.virtuemart_category_id = cat.virtuemart_category_id
   WHERE i.virtuemart_order_id=7392 ) t
WHERE t.poradi = 1
ORDER BY t.virtuemart_order_item_id

Každopádně vypisovat jen jednu z provázaných možností zavání divností. Kdybyste chtěl všechny, bude to více programování, viz Srovnání dotazů do závislých tabulek
lopik
Profil
Ďakujem, keď to hodím ako SQL dotaz, tak mi vyhodí hlášku: #1060 - Opakované meno poľa 'virtuemart_product_id' :((
Kajman
Profil
Tak zkuste místo hvězdiček vypsat všechny sloupce, které potřebujete a tak aby se neopakovaly názvy nebo jim dát jedinečné aliasy.
lopik
Profil
Vyskúšal som to upraviť a stále to hádže všetky riadky tzn, vypíše produkt viackrát, ak má priradených viac kategórii ako jednu:
SELECT *
FROM
  (SELECT i.virtuemart_product_id as b,
          p.product_sku as c,
          m.virtuemart_manufacturer_id as z,
          cat.category_name as y,
          ROW_NUMBER() OVER(PARTITION BY i.virtuemart_order_item_id) AS poradi
   FROM zceuiqvirtuemart_order_items i
   LEFT JOIN zceuiqvirtuemart_products p ON p.virtuemart_product_id = i.virtuemart_product_id
   LEFT JOIN `zceuiqvirtuemart_product_manufacturers` ON i.virtuemart_product_id = `zceuiqvirtuemart_product_manufacturers`.`virtuemart_product_id`
   LEFT JOIN `zceuiqvirtuemart_manufacturers_sk_sk` AS m ON m.`virtuemart_manufacturer_id` = `zceuiqvirtuemart_product_manufacturers`.`virtuemart_manufacturer_id`
   LEFT JOIN zceuiqvirtuemart_product_categories AS pcat ON p.product_parent_id = pcat.virtuemart_product_id
   LEFT JOIN zceuiqvirtuemart_categories_sk_sk AS cat ON pcat.virtuemart_category_id = cat.virtuemart_category_id
   WHERE i.virtuemart_order_id=7392 ) t
Kajman
Profil
Jedinečné id z košíku ale omezuje to WHERE t.poradi = 1, které jste nezkopíroval.
lopik
Profil
Ďakujem, to som si nevšimol. Avšak ak tam nedám order by
ORDER BY t.virtuemart_order_item_id
vyzerá, že to ide. ak však to dám s ním, vyhodí mi chybu 1054 - Neznáme pole 't.virtuemart_order_item_id' v 'order clause'
Kajman
Profil
Protože jste ho nevypsal v poddotazu. Jestli podle nej chcete řadit, musite ho vypsat z tabulky i.
lopik
Profil
Ďakujem za pomoc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0