Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Pobranie z innej tabeli jeśli varchar jest cyfrą
Forum PHP.pl > Forum > Przedszkole
maviozo
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 smile.gif
mortus
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.
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.