AKCE! Doména CZ zdarma ke každému ONEbit hostingu
Zobrazují se odpovědi 1 až 7 z 7

Odstranění duplicit z SQL dotazu

  1. Potřeboval bych poradit, jak na odstranění duplicity, která vlastně aní není duplicita.

    product_id;seller_id;scrap_id;position
    1; 5126; 6; 1
    1; 20969 ;6; 2
    1; 5527; 6; 3
    1; 43594; 6; 4
    1; 5126 ;6; 13
    1; 20969 ;6; 5
    1; 25244; 6; 6
    1; 5527; 6; 7
    1 1;8055; 6; 8
    1; 4281; 6; 14
    1; 17631; 6; 11
    1 ;39676; 6 ;12
    1; 54480; 6; 9
    1; 56745; 6; 10
    2; 5126 ;6; 1
    2; 17631 ;6; 2
    2; 20969 ;6; 3
    2; 17631 ;6; 4
    2; 5126; 6; 13
    2; 20969 ;6; 5
    2; 25244; 6; 6
    2; 45386; 6; 7
    2; 5527; 6; 8
    2; 18055; 6; 9
    2; 4281; 6; 15
    2; 43594; 6; 14
    2; 39676; 6; 12
    2; 54480; 6; 10
    2; 56745; 6; 11


    Dotaz:
    Kód:
    SELECT distinctrow p.product_id,                          
                              p.scrap_id,
                              position,
                              price,
                              heurekacart,
                              authorized,
                              seller_name,
                              seller_website,
                              product_name,
                              product_url
    FROM position_heureka_cz AS p, data_heureka_cz AS d 
    LEFT JOIN seller_list USING (seller_id)
    LEFT JOIN product_list USING (product_id)
    LEFT JOIN product_sitemap_heureka USING (product_id)
    LEFT JOIN product_code USING (product_id)
    LEFT JOIN product_status USING (product_code)
    WHERE p.scrap_id=d.scrap_id
    AND p.product_id=d.product_id
    AND p.seller_id=d.seller_id
    AND domain_tld='cz'
    AND p.scrap_id=$scrap_id
    ORDER BY product_name

    Výsledkem je seznam produktů a pozice eshopu v detailu produktu na Heurece. Jenže v detailu může být prodejce 2x. Jednou na aukční pozici a pak ještě na "organické". Jak to mám udělat, aby tam byl jen 1x? Ona to sice není skutečná duplicita, ale v reportu to jako duplicita působí...

    Ideální by bylo, kdyby p.seller_id mělo pravidlo, že pakliže je u p.product_id 2x, tak se vezme záznam, kde je hodnota position menší. Jen nevím, jak napsat tu IF podmínku do SQL.

    ---------- Příspěvek doplněn 27.05.2016 v 11:20 ----------

    PS: používám MySQL

  2. Co se právě děje na Webtrhu?

  3. DISTINCT na to nezabírá. Ono to není duplicitní. seller_id může mít dvě různé position pro stejný produkt...

  4. Tak potom pro slozitejsi logiku pouzit proceduru.

  5. Už to funguje.. Pomohlo to narvat do skupin..

    Kód:
    SELECT   p.position, 
                 p.product_id, 
                 p.seller_id, 
                 product_code, 
                 heurekacart,
                 authorized,
                 seller_name,
                 seller_website,
                 product_name,
                 product_url
    FROM position_heureka_cz AS p, data_heureka_cz AS d 
    LEFT JOIN seller_list USING (seller_id)
    LEFT JOIN product_list USING (product_id)
    LEFT JOIN product_sitemap_heureka USING (product_id)
    LEFT JOIN product_code USING (product_id)
    LEFT JOIN product_status USING (product_code)
    WHERE p.scrap_id=d.scrap_id
    AND p.product_id=d.product_id
    AND p.seller_id=d.seller_id
    AND domain_tld='cz'
    AND p.scrap_id=92
    GROUP BY product_id, seller_id 
    ORDER BY product_id, position

  6. No jenom si dejte pozor, že takto
    Kód:
    SELECT   p.position, 
                 p.product_id, 
                 p.seller_id, 
                 product_code, 
                 heurekacart,
                 authorized,
                 seller_name,
                 seller_website,
                 product_name,
                 product_url
    FROM position_heureka_cz AS p, data_heureka_cz AS d 
    LEFT JOIN seller_list USING (seller_id)
    LEFT JOIN product_list USING (product_id)
    LEFT JOIN product_sitemap_heureka USING (product_id)
    LEFT JOIN product_code USING (product_id)
    LEFT JOIN product_status USING (product_code)
    WHERE p.scrap_id=d.scrap_id
    AND p.product_id=d.product_id
    AND p.seller_id=d.seller_id
    AND domain_tld='cz'
    AND p.scrap_id=92
    GROUP BY product_id, seller_id 
    ORDER BY product_id, position
    tam nebudete mít tu nejmenší hodnotu u té position, ale první která se vyskytne. Teoreticky by mělo stačit do toho dotazu si dát něco takového
    Kód:
    SELECT   MIN(p.position), 
                 p.product_id, ...

  7. Citace Původně odeslal MatesM Zobrazit příspěvek

    tam nebudete mít tu nejmenší hodnotu u té position, ale první která se vyskytne. Teoreticky by mělo stačit do toho dotazu si dát něco takového
    Kód:
    SELECT   MIN(p.position), 
                 p.product_id, ...
    min() jsem zkoušel, ale to nefunguje, protože je to agregační hodnota a ostatní data agregovaná nemám... Mám to seřazené dle té pozice, takže ta menší je vždy první

Hostujeme u Server powered by TELE3