Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wybieranie rekordow o danym jezyku
kepaso
post 27.06.2007, 14:22:00
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.06.2007

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


Witam

Mam tabelę:
  1. CREATE TABLE `u_cities_test0` (
  2. `city_id` int(11) NOT NULL DEFAULT '0',
  3. `countrycode` char(2) NOT NULL DEFAULT '',
  4. `languagecode` char(2) NOT NULL DEFAULT '',
  5. `name` varchar(255) NOT NULL DEFAULT '',
  6. PRIMARY KEY (`city_id`,`languagecode`),
  7. KEY `countrycode` (`countrycode`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Chcę wybrać nazwę miasta z danego kraju, np:
  1. SELECT name
  2. FROM u_cities_test0 WHERE countrycode="pl"


Jednak chcialbym wybrac miasta w danym państwie przetlumaczone na dany język, np.
  1. SELECT name
  2. FROM u_cities_test0 WHERE countrycode="pl" AND languagecode="es"

Jeśli natomiast nie ma tłumaczenia dla danego miasta to chcialbym wybrac nazwę tego miasta w języku angielskim (en).

Przyklad:
(name, countrycode, languagecode)
Warsaw PL EN
Warsawaas PL ES //przykladowe tlumaczenie dla hiszpanskiego jezyka, nie chce mi sie szukac poprawnego
Cracov PL EN

I powinno wybrac:
Warsawaas
Cracov

Probowalem m.in. cos takiego:
  1. SELECT name
  2. FROM u_cities_test0 WHERE countrycode="pl" AND languagecode=IF(name!="","pl","en")

Jednak wybiera tylko te rekordy, ktore sa przetlumaczone na PL.

Pozdrawiam

Ten post edytował kepaso 27.06.2007, 21:30:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
UDAT
post 28.06.2007, 11:26:11
Post #2





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

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


To pierwsze co mi przyszło do głowy, pewnie da się szybciej.
  1. SELECT DISTINCT IFNULL(
  2. (
  3. SELECT name FROM u_cities_test0 WHERE u_cities_test0.city_id=t1.city_id AND languagecode="es"
  4. ),
  5. (
  6. SELECT name FROM u_cities_test0 WHERE u_cities_test0.city_id=t1.city_id AND languagecode="en"
  7. )
  8. ) FROM u_cities_test0 t1
  9. WHERE t1.city_id IN (
  10. SELECT DISTINCT city_id FROM u_cities_test0 WHERE countrycode="pl"
  11. );


A to drugie:

  1. SELECT name FROM u_cities_test0 t1
  2. WHERE languagecode=IF(
  3. EXISTS(
  4. SELECT city_id FROM u_cities_test0 WHERE languagecode="es" AND city_id=t1.city_id
  5. ),
  6. "es", "en"
  7. );


Ten post edytował UDAT 28.06.2007, 11:31:19
Go to the top of the page
+Quote Post
kepaso
post 6.07.2007, 20:59:12
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.06.2007

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


Dzięki bardzo, sprawdziłem na szybko pierwsze rozwiązanie i działa.

Jeszcze raz dzięki, uprości mi to sprawę bardzo.

Pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 16:08