![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 21.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Potrzebuję z bazy danych z tabeli "imie" wybrać określone rekordy spełniające określone kryterium: imie ma mieć 7 znaków, oraz zawierać pojedyncze ale niepowtarzające się samogłoski.
Struktura tabeli: id, imie, ilosc. Z ilością znaków nie ma problemu, ale z resztą nie wiem jak to ugryźć.
Ten post edytował shreker 18.08.2017, 17:26:49 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Z długością też nie powinieneś mieć problemu. Poszperaj w sekcji dotyczącej funkcji na stringach. Taka funkcja musi uwzględniać fakt istnienia polskich znaków.
Drugie kryterium dotyczy tylko i wyłącznie jednej samogłoski w wyrazie, czy może wystąpić również inna (np. a, o, e)? -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 21.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
z długością problem jest rozwiązany (sorry dałem po prostu złą cyfrę). Natomiast o samogłoski chodzi o to że mogą występować w dowolnej ilości ale niepowtarzające się, czyli np. nie może dwa razy występować "a".
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Takie coś mi przyszło do głowy:
Szukamy danej samogłoski, dzielimy wyraz na dwie części w miejscu jej wystąpienia i sprawdzamy, która z nich zawiera daną samogłoskę. Odrzucamy jeśli obydwie części zawierają daną samogłoskę. Np.: Cze(e=1) sław(e=0) OK, Czesła(a=1) w(a=0) OK, całość OK A(a=1) delajda(a=1) NIE OK, Ade(e=1) lajda(e=0) OK, całość NIE OK Ten post edytował trueblue 18.08.2017, 19:36:23 -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 21.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
fajne trueblue, mogło by tak być, tylko zastanawiam się, czy nie da się tego zrobić przy użyciu np tablicy. To znaczy wybieram zapytaniem całość do tablicy, tam wyrzucam najpierw z tablicy wszystkie które nie spełniają wymagań co do długości (to akurat proste), a później (tylko nie wiem jeszcze jak), sprawdzam resztę.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Naprawdę uważasz, że wrzucenie wstępnie odfiltrowanych danych do osobnej tablicy i potem kolejne zapytanie (jeszcze nie wiadomo jakie) na tych nowych danych będzie optymalniejsze? No, to powiedzenia:)
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 21.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie powiedziałem tak, po prostu zastanawiam się.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli znajdziesz optymalniejszy sposób dla drugiego kryterium, to nie zmieni to faktu, że tworzenie dodatkowej tabeli i filtrowanie etapami, nie ma sensu - nadal wystarczy jedno zapytanie.
-------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 21.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
dzięki
![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wyciągnij sobie wszystkie 7-literowe do tablicy,
Potem wywalasz wszystko co nie jest samogłoską, robisz count i jeśli jest jakas litera > 1 wywlasz wyraz. Czasami nie ma co kombinowac w BD bo łatwiej to oprogramować niż tworzyć potworki sql ![]() |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Tablica w PHP? Aaa, tak ok.
Po wywaleniu spółgłosek zrobiłbym jednak tak: rozkleić string na litery, posortować, skleić i porównać z "aeiouy". -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak też można
![]() ![]() |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Kod \b\w*(\w)\w*?\1\w* To powinno zaznaczyć wyrazy z duplikatem znaków. Zapewne jakby ograniczyć baze poszukiwań wyłącznie do samogłosek, to by też zadzialało. Kod \b\w*([eyuiao])\w*?\1\w* To powinno zadziałać tylko dla powtórzonych samogłosek. A jak już masz tablicę wyrazów o określonej długości, to ta funkcja powinna załatwić sprawę (nie testowałem, ale na oko zadziała - kwestia wstaweinia dobrego regexa do składni preg_grep)
Ten post edytował sabat24 18.08.2017, 22:40:33 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 21:45 |