![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam 5 tabel: (IMG:http://img9.imageshack.us/img9/1790/relt.jpg) Stworzyłem zapytanie:
Ale jest ono niekompletne bo wyniki wyglądają następująco: Kod 1 | tytul1 | tytul2 | wydawn1 | 2009 | isbn1 | 412 | 2x5 | 0 | 12 | fajna dosc | c:/ | 1 | 1 | 1 | 1 | zenon1 | zbigniew2 | kowal | polak | znany jest | 1 | zenon1 | zbigniew2 | kowal | polak | znany jest | 2 | mgr | 1 | 1 | 2 | 1 | tytul1 | tytul2 | wydawn1 | 2009 | isbn1 | 412 | 2x5 | 0 | 12 | fajna dosc | c:/ | 1 | 1 | 1 | 1 | zenon1 | zbigniew2 | kowal | polak | znany jest | 1 | zenon1 | zbigniew2 | kowal | polak | znany jest | 1 | inz | 2 | 1 | 1 | 1 | tytul1 | tytul2 | wydawn1 | 2009 | isbn1 | 412 | 2x5 | 0 | 12 | fajna dosc | c:/ | 2 | 1 | 2 | 2 | janek1 | alek2 | sypniewski | polak | znany jest tez | 2 | janek1 | alek2 | sypniewski | polak | znany jest tez | 3 | dr | 4 | 2 | 3 | 2 | tytul2 | tytul3 | wydaw22n1 | 2109 | isbn133 | 4120 | 2x52 | 1 | 122 | f11ajna dosc | c:dwukropek | 3 | 2 | 3 | 3 | janek222 | alek3333 | sypn4444 | pola555k | znan555555y jest tez | 3 | janek222 | alek3333 | sypn4444 | pola555k | znan555555y jest tez | 0 | brak | 6 | 3 | 0 | Czyli książka pierwsza ma 2 autorów z których jeden ma 1 tytuł a drugi ma 2 tytuły. Przez co książka o id=1 jest powtórzona 3 razy. Jak powinno wyglądać zapytanie aby w wyniku książka pojawiała się tylko raz a jedynie autorzy z przydzielonymi do nich tytułami byli wyświetlani tyle razy ilu ich jest? Ten post edytował sadistic_son 12.12.2009, 01:30:52 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Myślę, że niepotrzebnie tak rozwarstwiłeś tytuły. Patrząc na stopnie nie ma ich wiele i wydzielanie magistra od inżyniera jako osobny tytuł jest niezbyt sensowne. Tak naprawdę możliwych kombinacji jest mało, bo tytuły naukowe się wielokrotnie wykluczają. Technik jest zastępowany przez inżyniera (który w Polsce jest najwyższym możliwym stopniem technicznym), doktor "nadpisuje" magistra, i tak dalej. Kombinacje więc dają niewiele więcej niż 10 kombinacji (IMG:style_emoticons/default/smile.gif) Niektóre zaś są "abstrakcją" i nie spotkasz choćby połączeń doktora oraz technika (IMG:style_emoticons/default/smile.gif) Oczywiście zawsze możesz używać łączeń i grupując kombinować z GROUP_CONCAT, tyle, że moim zdaniem lepiej to robić dopiero na poziomie autorów, nie zaś już przy tytułach naukowych.
|
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Zamykam Ok, załatwione
Powód edycji: [Cysiaczek]:
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
No tak ale jesli w tabeli t_author umieszczę pole 'title' to w twakim wypadku autor będzie mógł mieć co najwyżej jeden tytuł naukowy. To tyklucza już możliwość chociażby mgr inż.
Z kolei wpisanie tego 'mgr inż' do jednego pola uniemożliwi wyszukiwanie po tytule naukowym. Np. 'wyświetl książki napisane przez profesorów, magistrów czy mgr inż. Ale nawet pomijając kwestię tytułów nadal pozostaje ten problem, że książka id=1 pojawi się 2 razy bo napisało ją 2 autorów. EDIT: Metodą 'super-chłopo-logiczną' udało mi się osiągnąć zamierzony efekt: Kod tytul:potop Drugi tytul: szwedzki Autorzy: mgr inz zenon1,kowal dr janek1,sypniewski tytul: kosmiczna wyprawa Drugi tytul: cos tam w prozni Autorzy: prof janek222,sypn4444 Realizuje to kod składający się z 3 zapytań, 3 pętli while itp. Wszystko wygląda i działa super. Ale domyślam się, że zamierzony (powyższy) efekt można osiągnąć jednym poprawnie skonstruowanym zapytaniem. I tu właśnie ponawiam zapytanie do Was: DA SIĘ? Dzięki. Ten post edytował sadistic_son 12.12.2009, 03:21:12 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Wcale nie wyklucza. Wystarczy, że w tabeli umieścisz je jako jedną z możliwości. Mgr, mgr inż. i inż to były by 3 osobne warianty. Dlatego pisałem o kombinacjach tytułów. Ich naprawdę nie ma aż tyle, by rozbijać to na kilka tabel i potem jeszcze je JOINować. Tylko niepotrzebnie dokładasz złączenie w zapytaniu. t_title i t_author_title śmiało mogą być jedną tabelą i w takim wypadku zmieni Ci się relacja na poziomie t_author i t_author_title. A wyszukiwanie zmieni ci się niewiele. Dlaczego niewiele? Bo tylko o tyle, że będziesz musiał znać przy szukaniu inżyniera gdzie jest inż, mgr inż, dr inż, prof. dr hab. inż. i tego typu. To samo z innymi tytułami. Wyszukiwanie więc będzie nie po jednym id określającym tytuł (WHERE id=1), ale kilku (WHERE id IN (1,4,5,6) ). Całość grupowana jest oczywiście po id książki, ale GROUP_CONCAT na autorach to przecież w takim wypadku już nie problem chyba (IMG:style_emoticons/default/winksmiley.jpg)
EDIT: Poprawka literówek. Nienawidzę pisania z kompa dziewczyny. Połowę klawiszy muszę walić chyba młotkiem bo nie reagują. Nawet spacja działa ze skutecznością 50% :/ Ten post edytował thek 12.12.2009, 10:55:46 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 16:56 |