Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pyt 1) Grupowanie słów dla kolumny fulltext index. Pyt. 2) Pobranie 1000 obiektów, ale tylko dla 20 więcej danych
teom
post 8.01.2018, 10:50:07
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 24.10.2006

Ostrzeżenie: (0%)
-----


Pyt. 1) Mam na kolumnie nałożony indeks " FULLTEXT INDEX ". Czy da się stworzyć takie zapytanie, które grupowałoby słowa i wyświetlała użytkownikom informację, ile jest poszczególnych słów.
Pyt. 2) W jednym zapytaniu chcę pobrać współrzędne 1000 obiektów, ale tylko dla pierwszych 20 chcę pobrać dodatkowe dane (nazwa, adres). Jak powinno wyglądać najbardziej optymalne zapytanie.


Nikt nie daje odpowiedzi. Zastanawiam się, czy czasem nie są to pytania zbyt banalne.

Może trochę więcej podam informacji

Ad 1) Mam założony FULLTEXT INDEX na kolumnie JABŁKA, który zawiera nazwy odmian jabłek od danego sadownika oddzielone przecinkiem np. "Reneta, Golden". Tych sadowników (rekordów) w bazie mam 1000. Czy w jednym zapytaniu mogę zliczyć ile jest odmian jabłek i w jakiej ilości (np. Reneta 5, Golden 7) korzystając z tego, że mam założony FULLTEXT INDEX, czy jednak muszę to obliczyć korzystając z rozwiązania, że w każdej pętli na każdym obiekcie robię explode(",", 'Reneta, Golden') i sumuje odmiany. Rozumiem, że w tym przypadku nie mogę korzystać z "GROUP BY".

Ad 2) W zapytaniu zastanawiam się nad odpowiednim użyciem SELECTA. Skoro tylko dla 20 obiektów chcę pobrać pełne dane adresowe, a dla 980 tylko współrzędne gps, to czy konieczne jest w zapytaniu w SELECIE wymienianie wszystkiego np. " SELECT gps, nazwa, miasto, ulica, kod_pocztowy, tel". Jak wy to robicie, bo wszędzie się trąbi, że w SELECIE powinno być tylko to, co potrzebujemy.
Go to the top of the page
+Quote Post
aras785
post 9.01.2018, 00:02:33
Post #2





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


Cześć.

Niestety nie mam pojęcia jak zrobić to wszystko w MySQL ale mam sposób na szybkie rozwiązanie Twojego problemu.

1. Masz tabele Sadownicy i w niej tą nieszczęsną kolumnę jabłka... Stwórz sobie tabelę np. rodzaje [id,id_sadownik,nazwa] i następnie za pomocą PHPa funkcji przydziel rodzaje jabłek do konkretnego sadownika. Dzięki temu zabiegowi będziesz mógł swobodnie operować na danych w samym MySQL. Zajmie Ci to 15 minut i będziesz miał porządek smile.gif

2. Przy tak małej ilości nie ma to za bardzo znaczenia smile.gif

Pozdrawiam
Go to the top of the page
+Quote Post
teom
post 9.01.2018, 07:27:26
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 24.10.2006

Ostrzeżenie: (0%)
-----


Ad 1) Myślałem o takim rozwiązaniu, żeby dane dać do osobnej tabeli, ale w moim przypadku jest to niemożliwe (nie wchodząc już w szczegóły). Pytam teraz czysto teoretycznie, czy MySQL dysponuje takim narzędziem, aby można było pogrupować słowa znajdujące się w kolumnie FULLTEXT INDEX. Chodzi o takie narzędzie, które można udostępnić userom. Gdzieś wyczytałem, że jest to możliwe, ale tylko dla celów testowych. Pytam was, jako osób o większym doświadczeniu.

Ad 2) Tabela liczy nie 1000, a 500 000 rekordów. Napisałem, że do zapytania pasuje 1000 obiektów (które chce wyświetlić na mapie), a tylko dla 20 chcę zaprezentować dane teleadresowe. Poza tym tabela liczy 60 kolumn o dużym stopniu wypełnienia. Z tego co wiem, dla lepszej wydajności należy ograniczać ilość kolumn podanych w SELECIE. Chodzi o to, czy da się zbudować tak zapytanie, aby tylko dla 20 obiektów pobrał dane z 15 kolumn, a dla 980 tylko współrzędne z 2 kolumn.
Go to the top of the page
+Quote Post
aras785
post 9.01.2018, 08:47:38
Post #4





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


Niestety nie jestem w stanie Ci pomóc. Spróbuj na stackoverlow dodając w pytaniu przykładową bazę (http://sqlfiddle.com/)

Ten post edytował aras785 9.01.2018, 08:48:12
Go to the top of the page
+Quote Post
gitbejbe
post 9.01.2018, 13:36:18
Post #5





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


1) jak to niemożliwe ? Najlepszym zapytaniem dla Ciebie będzie DROP TABLE, bo to rozwiązanie to zwyczajne go***. Korzystasz z bazy relacyjnej jaką jest mysql, wiec dlaczego rzucasz sobie kłody pod nogi z jakimiś archaicznymi rozwiązaniami ? Poczytaj o relacji jeden do wielu i operacjami typu join, implementacja zajmie kilka chwil. Nie ma dla ciebie innego dobrego rozwiązania, pozostają same tragiczne, o których nawet nie chce myśleć. Poświęć tą godzinę na wyedukowanie, w necie masz pełno przykładów, na pewno sobie poradzisz i zobaczysz jaki śmietnik miałeś wcześniej. Co do pytania czy jest to w ogóle możliwe, to jakiś magik pewnie by coś wyczarował, ale po co skoro są od tego relacje.

2) Dobrą praktyką jest aby pobierać tylko to co Ciebie interesuje, ale bez przesady. Zrób sobie porównanie - napisz to samo zapytanie 2 razy, z tym że raz niech pobierze te kilka kolumn , a raz niech pobierze wszystkie kolumny. Powtórz kilkukrotnie i wylicz średnią dla obu tych zapytań. Wg mnie różnica nie będzie warta dalszego kombinowania, a na pewno wydajnościowo będzie waliło na łeb zapytanie które próbujesz wymyślić w pkt 1.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 03:13