Avatar billede jakl2 Nybegynder
30. april 2009 - 10:37 Der er 2 kommentarer

Tricky GROUP BY

Hej eksperter

Jeg er ved at tilrette noget gammel kode.

Jeg skal lave en group by på p.products_id, som der allerede bliver gjort. Derfor skal der laves en group by p.collection_id, men dem hvor collection_id er lig med 0 (tallet) skal ikke grupperes. Det er altså kun dem med 1,2,3,4,5 osv der skal grupperes.

Koden er nu:

$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd
          left join " . TABLE_PRODUCTS . " p on p.products_id = pd.products_id
          left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id
          left join " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c on p.products_id = p2c.products_id
          left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id
          where p.products_status = '1' and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "' and ".(int)$current_category_id." IN ( SELECT categories_id FROM categories WHERE ((customers_groups_id = '') or (customers_groups_id is NULL) ) ) and ( (p.givskovcykler = 0) ".
 
          //petyus filter
          (($_SESSION['is_own_site']) ? " or (p.givskovcykler = 1)  " : "" )  .
          (($_SESSION['cykeldillen']) ? " or (p.givskovcykler = 10)  " : "" )  . ") ".

          " GROUP BY p.products_id ";
Avatar billede acore Ekspert
30. april 2009 - 18:22 #1
Du kune opdele det i to SELECT, en hvor du tog de records, hvor collection_id var 0 uden GROUP BY og en, hvor du tog de records, hvor collection_id ikke var 0 med GROUP BY og så kunne du samle resultatet med en UNION.

Altså noget i stil med:

(SELECT ... WHERE collection_id = 0)
UNION
(SELECT ... WHERE collection_id <> 0 GROUP BY collection_id)

Der er muligvis smartere og mere effektive måder, men jeg kender ikke til muligheden for selektiv GROUP BY.
Avatar billede jakl2 Nybegynder
01. maj 2009 - 08:02 #2
acore > Ja, det havde jeg også tænkt over, men så synes jeg bare den bliver for lang og klumpet.

Ind til videre har jeg kopiret id på recorden over i collection_id, så er den i hvert fald forskellig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester