Pomoc w utoworzeniu zapytania MySql

0

Mam zapytanie, które wyciąga niektóre dane z tabeli ps_order_detail (m.in. product_name).
Chciałbym by nazwa produktu była w języku polskim a w ps_order_detail jest tylko po angielsku.
M.in. po polsku nazwy produktów mam w tabeli ps_product_lang (język nr 1).
Czy jest możliwe by utworzyć zapytanie w taki sposób by nazwę produktów wyciągnąć z tabeli ps_product_lang właśnie po polsku?
Zakładam, że musiałoby się to wiązać z odniesieniem do identyfikatora produktu z tabeli ps_order_detail.
Chodzi oczywiście nie o wszystkie produkty (bo to wiem jak zrobić) tylko o produkty z ps_order_detail.

Jestem dość słaby z baz danych a to chyba dość skomplikowane dlatego proszę o pomoc :)

0

Czy w detail masz jakis id do langa a w langu jakis enum z jezykiem typu PL?

0

Dzięki za błyskawiczną odpowiedź :)

Właśnie w detail nie mam żadnego langa (przynajmniej nie widzę)

Poczekaj bo dopiero może załapałem. W tych dwóch tabelach powtarza się kolumna id_product (z tym, że w detail nazywa się product_id).

0

To sproboj joina po tym idku :)

0

not coś w ten deseń


select * from  ps_order_detail od
inner join ps_product_lang pl on od.product_id = pl.id_product 
0

Sorry Panowie ale jak mam to połączyć z istniejącym już:

SELECT o.id_order, o.reference, o.payment, o.date_add, o.total_paid, o.total_shipping, g.firstname, g.lastname, ca.name, i.document_type, op.date_add AS order_reference, d.product_name, d.product_quantity, d.product_reference FROM ps_order_detail d
		LEFT JOIN ps_orders o ON (d.id_order = o.id_order)
		LEFT JOIN ps_customer g ON (o.id_customer = g.id_customer)
		LEFT JOIN ps_order_state_lang os ON (o.current_state = os.id_order_state)
		LEFT JOIN ps_carrier ca ON (o.id_carrier = ca.id_carrier)
		LEFT JOIN ps_invoice_bill i ON (i.id_cart = o.id_cart)
		LEFT JOIN ps_order_payment op ON (op.order_reference = o.reference)
		WHERE os.id_lang = 1 
0

xdd najprosciej dopisac nowego left joina dla .._lang i do selecta dodac kolumne z tego ..._lang ktora zawiera tlumaczenie

0
SELECT o.id_order, 
       o.reference, 
       o.payment, 
       o.date_add, 
       o.total_paid, 
       o.total_shipping, 
       g.firstname, 
       g.lastname, 
       ca.name, 
       i.document_type, 
       op.date_add AS order_reference, 
       d.product_name, --tu trzeba by wstawić odpowiednią kolumnę z tabeli pl 
       d.product_quantity, 
       d.product_reference 
FROM   ps_order_detail d 
       LEFT JOIN ps_orders o 
              ON ( d.id_order = o.id_order ) 
       LEFT JOIN ps_customer g 
              ON ( o.id_customer = g.id_customer ) 
       LEFT JOIN ps_order_state_lang os 
              ON ( o.current_state = os.id_order_state ) 
       LEFT JOIN ps_carrier ca 
              ON ( o.id_carrier = ca.id_carrier ) 
       LEFT JOIN ps_invoice_bill i 
              ON ( i.id_cart = o.id_cart ) 
       LEFT JOIN ps_order_payment op 
              ON ( op.order_reference = o.reference ) 
       LEFT JOIN ps_product_lang pl
				--ten warunek sprzężenia trzeba by prawdopodobnie rozbudowac o id języka
				--czyli dopisac and pl.id_lang=1, bo dostaniesz powielone wiersze
              ON ( d.product_id = pl.id_product  ) 
WHERE  os.id_lang = 1  
0
Panczo napisał(a):

not coś w ten deseń


select * from  ps_order_detail od
inner join ps_product_lang pl on od.product_id = pl.id_product 

Zastanawia mnie tylko czemu phpMyAdmin wyświetla mi tylko wyniki od 14-go zamówienia.

0

zmien na left join-a widocznie nie wszystkie produkty maja tlumaczenie

0

Dzięki, rzeczywiście to jest to.

Teraz gorsza sprawa - połączenie tego w całość.

0

masz to w moim poscie

0
Panczo napisał(a):
       d.product_name, --tu trzeba by wstawić odpowiednią kolumnę z tabeli pl 

Sorry, że tak o wszystko dopytuję ale przyznaję, że z baz jestem poziom przedszkolaka dlatego liczę na zrozumienie bo próbuję i po prostu nie wychodzi...
Kolumnę z tabeli lang (z nazwą name - tu mamy właśnie nazwy polskie)?
I jak ją dodać? d.name nie przechodzi - phpMyAdmin zwraca "nieznana kolumna".

0

no to będzie pl.name, ale skoro nie wszystkie maja tłumaczenie to zrobiłbym tak: COALESCE(pl.name,d.product_name) as product_name

0

Super, wszystko działa. Wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1