Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybieranie rekordow o danym jezyku
Forum PHP.pl > Forum > Bazy danych
kepaso
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
UDAT
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. );
kepaso
Dzięki bardzo, sprawdziłem na szybko pierwsze rozwiązanie i działa.

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

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.