Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]sformułowanie zapytania
kleszczoscisk
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Witam

Pobieram z kilku tabel produkty, producentów i opisy produktów w 2 językach. Pobieram obie wersje językowe opisów bo póki co wersji obcojęzycznych jest znikoma ilość i to co się da tłumaczę przez php z automatu.
Problem:
Jak wykluczyć w zapytaniu polską wersję opisu produktu jeśli istnieje obcojęzyczna ?
W tabeli 'produkty' każdy produkt ma unikalny ID. W tabeli 'opisy' każdy opis ma odpowiedni ID produktu i oprócz tego oznaczenie języka np. 'pl', 'en'.
Czy rozwiązaniem byłoby podzapytanie w rodzaju [SQL] pobierz, plaintext
  1. SELECT DISTINCT product_id FROM products
[SQL] pobierz, plaintext , które byłoby jednocześnie warunkiem w zapytaniu głównym: [SQL] pobierz, plaintext
  1. ... AND WHERE products.product_id IN(SELECT DISTINCT product_id FROM products) ...
[SQL] pobierz, plaintext Czy może powinienem filtrować uzyskane wyniki zapytania zamiast modyfikować zapytanie... ?
Musiałbym wtedy wywalić z tablicy (uzyskanej przez while($r = mysql_fetch_array($rekord)){}) te rekordy z opisem 'pl', które mają swój odpowiednik 'en'... Jak ?
?
Proszę o pomoc, podpowiedzi.

Ten post edytował kleszczoscisk 4.09.2009, 14:58:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kleszczoscisk
post
Post #2





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


Dzięki, zaraz będę to analizował. Wydaje mi się jednak (może źle), że chyba lepiej byłoby znaleźć jakiś sposób na odfiltrowanie z tablicy rekordów: jeśli jest rekord z językiem 'en' to wywal rekord o tym samym ID z językiem 'pl'

Powinienem chyba jeszcze dołączyć strukturę tabel:

products:
id*| id_kategorii | id_producenta | obrazek | ...

products_translations:
id* | product_id | lang | opis | ...

Witam

No niestety nie udało mi się nic z tym problemem zrobić. Próbuję z innej strony: filtrowanie tablicy jaką dostaję po wyciągnięciu z bazy. Wygląda ona mniej więcej tak:
Kod
   Array
   (
       [id] => 101
       [id_opisu] => 1
       [lang] => pl
       [opis] => to jest opis polski pierwszego produktu
   )
   Array
   (
       [id] => 101
       [id_opisu] => 2
       [lang] => en
       [opis] => first product -  description in english
   )
   Array
   (
       [id] => 102
       [id_opisu] => 3
       [lang] => en
       [opis] => second product -  description in english
   )
   Array
   (
       [id] => 103
       [id_opisu] => 4
       [lang] => pl
       [opis] => trzeci produkt, opis polski
   )


Gdzie
  • id - numer produktu unikalny z tabeli 'produkty'
  • id_opisu - unikalny numer tłumaczenia z tabeli 'opisy'
  • lang - symbol języka z tabeli 'opisy'
  • opis - tresc opisu z tabeli 'opisy'
Pomijam nieistotne elementy tablicy. W sumie do zapytania pobierane są dane z 4 tabel.

... i jak wywalić z tej tablicy rekord z opisem polskim jeśli istnieje jego odpowiednik o tym samym 'id' z 'opise'm w języku angielskim ?
Czyli w tym przypadku pierwszy rekord ?

Ten post edytował kleszczoscisk 4.09.2009, 15:18:28
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 23:13