![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 30.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
problem zapewne banalny, jednak pomimo kilku podobnych wątków żaden nie wyjaśnia mojego problemu:
Jak napisać SELECT aby robił GROUP BY [nazwisko z zamienioną ostatnią literką na i jeśli na końcu jest a] Wyjaśniam: Mam prostą bazę osób (nazwisko i imię). Na stronie wybieram literkę z listy i dostaję listę nazwisk rozpoczynających się na daną literę. Wyniki są pogrupowane - tzn jak jest Kowalski Adam i Piotr otrzymuje jeden link "Kowalski" (po jego kliknięciu otrzymuję listę osób z tego nazwiska). To jest proste - GROUP BY a potem funkcja wyszukiwania wg nazwiska. Potrzebuję jednak zmodyfikować tak to pierwsze wyszukiwanie, aby grupowało także nazwiska kobiece i męskie (tzn te z końcówką na -i oraz -a). Czyli otrzymywać jeden link "Kowalski" - tak aby po jego kliknięciu wychodziła lista i kobiet i mężczyzn. Nie mogę tego zrobić jednak przez absolutne obcięcie jednej litery bo jeśli nazwiska są np. Baka i Bako - to muszą być osobne linki. Na stronie mam dwie funkcje - jedna do wyszukania wg litery, druga wg nazwiska. Ta druga działa po kliknięciu w link. Potrzebuję tej pierwszej. -------------------- Genealogia Polaków
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ok to jest średnia sprawa.
Tu masz przyklad:
Musisz tylko dorzucić to co tam jeszcze masz w zapytaniu ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 30.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo - zbyt wysoka filozofia na mój brak doświadczenia. Ale udało się. Jest tylko jeden mały problem
Wyniki wyświetlają się zarówno jako "Kowalska" jak i "Kowalski" Czyli jakby dwukrotnie. Mój kod obecny to: Kod $getWord=mysql_query("SELECT
(CASE SUBSTRING(`nazwisko`,LENGTH(`nazwisko`),2) WHEN 'ka' THEN CONCAT(SUBSTRING(`nazwisko`,2,LENGTH(`nazwisko`)-2),'ki') ELSE `nazwisko`END) AS `nazwisko_po_zmianie` FROM `fnt` WHERE `nazwisko` LIKE '$letter%' GROUP BY `nazwisko_po_zmianie`", $db); if($getWordArray=mysql_fetch_array($getWord)) { do { if ($string[strlen($getWord)-1]='i') { echo "<br><a href=\"index.php?nazwisko="; printf(substr($getWordArray["nazwisko_po_zmianie"], 0, -1)); echo "\">"; printf($getWordArray["nazwisko_po_zmianie"]); echo "</a>"; } else { echo "<br><a href=\"index.php?nazwisko="; printf($getWordArray["nazwisko_po_zmianie"]); echo "\">"; printf($getWordArray["nazwisko_po_zmianie"]); echo "</a>"; } } while($getWordArray=mysql_fetch_array($getWord)); } -------------------- Genealogia Polaków
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Proponuje DISTINCT:
-------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 30.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki - właśnie siedziałem nad tym pół nocy i stwierdziłem że błąd jest w składni obliczania - która jest różna w poleceniach MySQL i PHP. Jeśli się prawidłowo to zrobi to zadziała i nie potrzeba DISTINCT
Trzeba było także użyć polecenia CHAR_LEGTH aby znieczulić na polskie literki. oto rezultat (mam nadzieje że prawidłowy i nie powoduje jakiś skutków ubocznych): Kod $getWord=mysql_query("SELECT (CASE SUBSTRING(`nazwisko`, -2, 2) WHEN 'ka' THEN CONCAT(SUBSTRING(`nazwisko` FROM 1 FOR CHAR_LENGTH(nazwisko)-2), 'ki') ELSE `nazwisko` END) AS `nazwisko_po_zmianie` FROM `fnt` WHERE `nazwisko` LIKE '$letter%' GROUP BY `nazwisko_po_zmianie`", $db); przepraszam za post pod postem - ale jest jeszcze jedno pytanie nie mogę sobie poradzić zeskładnią czy da sięŁ zrobić żeby rozsezryć ten warunek wyszukiwania na dwa przypadki -cka -ska czyli zamiast wyszukiwania po 2 literkach "ka" na końcu wyszukiwało dwa zestawy po 3 i odpowiednio zamieniało na -cki lub -ski chodzi o to, że sama końcówka -ka nie zawsze oznacza nazwisko żeńskie np. "Zielonka" -------------------- Genealogia Polaków
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ok zaraz pokombinuje
![]()
jeśli się nei pomyliłem to powinno chodzić Ten post edytował Sephirus 28.10.2011, 08:05:56 -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 30.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Działa thx !
-------------------- Genealogia Polaków
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 00:30 |