2013-07-16 9 views
11

Mam dwie tabele, produkty i kody kreskowe MySQL. Produkt może mieć wiele kodów kreskowych, dlatego oddzieliłem go na własny stół.MySQL pozostawił połączenie z wieloma wierszami po prawej, jak połączyć w jeden wiersz dla każdego po lewej stronie (z polem, które chcę z prawej tabeli, które zostało dodane)?

To co próbowałem (za pomocą Active Record CodeIgnighter, ale pisałem na zapytanie tutaj, co oznacza, jeśli nie jest literówka, to może nie być w mojego aktualnego zapytania):

SELECT products.id, products.snipe_price, group_concat(barcodes.barcode) as barcodes FROM products LEFT JOIN barcodes on barcodes.product_id = products.id 

Ale to po prostu zwraca jeden wiersz z wszystkimi kodami kreskowymi z każdego produktu concat ed, w jaki sposób mogę uzyskać jeden wiersz dla każdego produktu z kodami kreskowymi produktów?

Wolałbym nie rozdzielać, ale jeśli nie ma rozwiązania z join, proszę dać mi znać.

Odpowiedz

23

trzeba group by:

SELECT products.id, products.snipe_price, group_concat(barcodes.barcode) as barcodes 
FROM products LEFT JOIN 
    barcodes 
    on barcodes.product_id = products.id 
group by products.id; 

Bez group by, MySQL interpretuje całą kwerendę jako kwerendy agregacji podsumowania wszystkich danych (z powodu obecności group_concat(), funkcja agregacji). Dlatego zwraca tylko jeden wiersz, podsumowany na wszystkich danych.

+0

Działa świetnie! byłoby jeszcze lepiej, gdyby wygenerował listę w formacie json –

+2

@eyal_katz. . . Jeśli masz pytanie, powinieneś zadać je raczej jako pytanie, a nie jako komentarz. –

Powiązane problemy