![]() |
![]() ![]() |
![]() |
![]()
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: Kolumna A oczywiście w takim przypadku musi być (var)char (IMG:style_emoticons/default/smile.gif)
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ść Ten post edytował maviozo 20.01.2012, 16:36:25 |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 21:34 |