Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyciągnąć rekord ID=1 lub ID=2 jeżeli ID=1 jest puste
Wave
post
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Czy jest prostsza metoda niż:
  1. SELECT IFNULL(b.value, a.value) AS value
  2. FROM table1 AS a
  3. LEFT JOIN table1 AS b ON b.id=1 AND b.value != ""
  4. WHERE a.id=2
?

Jeżeli rekord o id=1 jest pusty to wyciągam rekord o id=2.

Zastosowanie:
Wyciąganie tłumaczeń tekstów (jeżeli nie mamy tekstu po polsku w bazie to wyciągamy angielską wersję).
Go to the top of the page
+Quote Post
adk11
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.12.2010

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


dobrze by było jakbyś podał kilka przykładowych rekordów z tej tabeli, bo dziwnie złączyłeś te tabelę samą z sobą

Ten post edytował adk11 2.12.2010, 14:48:50
Go to the top of the page
+Quote Post
Wave
post
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Oj, no na przykład coś takiego:

ID - VALUE - PARAM
1 - "polski" - "text"
2 - "english" - "text"

  1. SELECT IFNULL(b.value, a.value) AS value
  2. FROM table1 AS a
  3. LEFT JOIN table1 AS b ON b.param=a.param AND b.id=1 AND b.value != ""
  4. WHERE a.id=2


Zwróci: "polski"

natomiast dla:
ID - VALUE - PARAM
1 - "" - "text"
2 - "english" - "text"

Zwróci "english".

Są łatwiejsze metody?
Go to the top of the page
+Quote Post
adk11
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.12.2010

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


Ja bym widział inaczej zbudowaną te tabelę.

CREATE TABLE `table1` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`VALUE` text,
`PARAM` text,
`LANG` enum('pl','en') DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

ID VALUE PARAM LANG
1 null window pl
2 window window en

wtedy szukając jakiegoś słówka używamy

SELECT IFNULL(a.`VALUE`, b.`VALUE`) AS value
FROM table1 AS a
LEFT JOIN table1 AS b ON a.`PARAM`=b.`PARAM`
WHERE a.`LANG`='pl' and b.`LANG` = 'en' and b.`PARAM`='window'

dużo można wymyślać ale to zależy od wielu czynników.


btw. zmieniłeś zapytanie dry.gif
Go to the top of the page
+Quote Post
Wave
post
Post #5





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Nie bierzesz pod uwagę, że polskiego tłumaczenia może nie być w bazie w ogóle (albo może mieć wartość ""), a poza tym to wiele nie wniosłeś. Zapytanie było poglądowe.
Cytat
dużo można wymyślać ale to zależy od wielu czynników.

Czynnik przedstawiłem w 1 poście: najprostsza metoda. Słucham zatem.

Myślałem też o podzapytaniach albo odpowiednim grupowaniu z użyciem having. Ostatecznie zostaje sprawdzanie w PHP i rozbicie na dwa co będzie chyba ciężkie przy dużej ilości zapytań.
Go to the top of the page
+Quote Post
adk11
post
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.12.2010

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


Przepraszam, nie doczytałem pierwszego posta.

Mówiąc o czynnikach miałem na myśli.
1. będzie więcej niż 2 języki
2. jak dużo będzie rekordów
3. jak często będzie szukane tłumaczenie
4. czy wchodzi w grę przeróbka tabeli

Jeżeli nie chcesz przerabiać tabeli i ogólnie pytanie było czy przy obecnej strukturze da się łatwiej uzyskać wynik to ja raczej nie widzę inaczej i dołączanie kompletnych tłumaczeń polskich z prawej strony jest wg mnie ok.

pozdrawiam
Go to the top of the page
+Quote Post
Pilsener
post
Post #7





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Przy tak skonstruowanej tabeli nie ma, wydajność będzie zawsze problematyczna ze względu na dużą redundancję (dużo pustych pól gdy dla danego języka nie będzie tłumaczenia) oraz na fakt, że operujemy tylko na części tabeli (nie potrzebujemy wszystkich języków na raz). Jeśli robisz to w bazie to ja bym polecał tabelę podstawową z frazami po angielsku + dodatkowa tabela dla każdego innego języka dołączana left joinem w której będą znajdować się tylko przetłumaczone frazy, oczywiście to, którą tabelę dołączamy zależy od usera.
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 Aktualny czas: 22.08.2025 - 02:26