Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Pobranie z innej tabeli jeśli varchar jest cyfrą, a jeśli nie, to tę wartość
maviozo
post
Post #1





Grupa: Zarejestrowani
Postów: 197
Pomógł: 24
Dołączył: 22.11.2010

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


Witam. Wykombinowałem sobie, że często powtarzające się wpisy w tabeli przerzucić do kolejnej i zwracać je po ID wiersza, a w pierwszym podawać tylko jego numer. Nie wiem jednak, jak skonstruować zapytanie mysql, które by to realizowało. Oczywiście nie byłoby żadnego problemu z dwoma zapytaniami i wykonanie przypisania po stronie php, jednak wydaje mi się to możliwe po stronie mysql. Dokładnie miałoby to wyglądać tak:
Kod
tabela A:
ID | kolumna A
1  | 1
2  | 1
3  | jakaś wartość
4  | 2
5  | 1
6  | inna wartość

tabela B
ID | kolumna B
1  | pierwsza wartość
2  | druga wartość

Wynik zapytania:
tabela A:
1 | pierwsza wartość
2 | pierwsza wartość
3 | jakaś wartość
4 | druga wartość
5 | pierwsza wartość
6 | inna wartość
Kolumna A oczywiście w takim przypadku musi być (var)char (IMG:style_emoticons/default/smile.gif)

Ten post edytował maviozo 20.01.2012, 16:36:25
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Opisana sytuacja przypomina nieco "tagowanie" artykułów. Jedynym słusznym podejściem jest trzymanie tagów/wpisów osobno, nawet jeśli któryś tag "podpinamy" tylko pod jeden artykuł. Przykładowe tabele:
ARTYKUŁY:
artykuł_id
treść
TAGI:
tag_id
słowo
TAGI_ARTYKUŁÓW:
artykuł_id
tag_id

Dlaczego tak? Ponieważ nie trzeba wtedy "kombinować" w żadnym z przypadków, z jakimi przyjdzie Ci się zmierzyć. Wszystkie tagi pobieramy prostym zapytaniem SELECT z JOIN.
Twoje podejście nie jest najlepsze ze wzglądu na to, że trzeba korzystać z rzutowania CAST, instrukcji warunkowej IF (lub jakiejś innej) i pobranie np. wszyskich tagów dla wszystkich artykułów będzie nie lada wyzwaniem. Jeśli pracujesz na InnoDB, to nie utworzysz też klucza obcego. Oczywście problem da się rozwiązać i w taki sposób, o jakim wspominasz, jednak jakakolwiek optymalizacja (np. nałożenie indeksów) będzie po prostu niemożliwa i przy dużej liczbie rekordów będą spore problemy z działaniem aplikacji.

Ten post edytował mortus 20.01.2012, 19:13:08
Go to the top of the page
+Quote Post

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: 16.09.2025 - 21:34