![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 578 Pomógł: 69 Dołączył: 15.04.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Posiadam dwie tabele w mysql.
Tabela towarów:
oraz początków nazw - identyfikująca rodzaj produktu:
Chciałbym pogrupować pierszą tabelę wg początków nazw z drugiej. (kolumna 'cena' jest tylko po to aby pokazać że grupowanie nie jest bezsensowne). Jakieś pomysły? Pierwszej tabeli nie mogę edytować. Żeby nie było: mysql znam, nie radzę sobie tylko ze zmienną długością masek. Gdyby wszystkie maski miały tą samą długość nie miałbym problemu:
Ten post edytował timon27 7.05.2013, 09:20:58 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dziwne podejście i w ogóle nieoptymalne. Taki rodzaj produktu powinien być chyba czymś w stylu kategorii. Niemniej da się to zrobić, choć nie wiem po co to złączenie.
Dać się da, ale nie polecam i radzę się dobrze zastanowić nad funkcjonalnością aplikacji i strukturą bazy danych. Ten post edytował mortus 7.05.2013, 10:01:55 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 578 Pomógł: 69 Dołączył: 15.04.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Struktura baz danych pochodzi z programu kasowego.
Program nie jest mojego autorstwa, nie mam mozliwości ani prawa jego modyfikacji. Zapytanie niestety działa tylko jeśli po masce jest spacja. Niestety mam też inne sytuacje:
Ten post edytował timon27 7.05.2013, 10:32:00 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Najgorszym z możliwych rozwiązań jest takie złączenie:
Najbardziej optymalnym i w dodatku bezinwazyjnym (nie trzeba modyfikować czyjejś aplikacji) rozwiązaniem wydaje się być utworzenie trzeciej tabeli maski_towarow zawierającej jedynie dwie kolumny id_maski i id_towaru, obie będące kluczem głównym. Później jednorazowym zapytaniem
uzupełniamy tabelę maski_towarow i w naszej "części" aplikacji korzystamy właśnie z niej:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 578 Pomógł: 69 Dołączył: 15.04.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
utworzenie trzeciej tabeli maski_towarow zawierającej jedynie dwie kolumny id_maski i id_towaru Jak niby mam to zrobić ? Przed każdym wywołaniem zapytania (o które pytam w tym wątku) mam tworzyć tę tabelę? To dopiero będzie nieoptymalne. Bo nie wyobrażam sobie monitorować w czasie rzeczywistym czy ktoś właśnie nie dodaje towarów do tabeli aby uzupełnić tabelę powiązań. LOCATE(nazwa,maska)=1 Dokładnie o to mi chodziło. Czas wykonania 3 sekundy (kilkanaście tysięcy towarów, setka masek) - akceptowalny przy własnych zestawieniach, choć faktycznie nieakceptowalne gdybym potrzebował to ze strony klientów. Ten post edytował timon27 7.05.2013, 11:55:41 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
No ale jeśli ktoś dodaje towar to i musi podać powiązaną z nim maskę, a to wszystko możemy dzięki TRIGGER-om wpakować do naszej tabeli maski_produktow (tę tabelę tworzymy i uzupełniamy tylko raz istniejącymi danymi, a później już na bieżąco danymi wprowadzonymi przez użytkownika).
Nie ma potrzeby modyfikowania czegokolwiek w istniejącej już aplikacji. Ten post edytował mortus 7.05.2013, 12:00:43 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 578 Pomógł: 69 Dołączył: 15.04.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No ale jeśli ktoś dodaje towar to i musi podać powiązaną z nim maskę Nie, nie nie musi. Skąd pomysł że musi? Miałby wychodzić z programu, aby go gdzieś podać? Jeśli dodaje się nowy RODZAJ towaru, to wtedy tak, ale to się dziej bardzo rzadko. a później już na bieżąco danymi wprowadzonymi przez użytkownika No ale w jaki sposób? Mam przechwytywać dodawanie towarów do bazy? To będzie niemożliwe. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 17:56 |