Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pyt 1) Grupowanie słów dla kolumny fulltext index. Pyt. 2) Pobranie 1000 obiektów, ale tylko dla 20 więcej danych
Forum PHP.pl > Forum > Bazy danych > MySQL
teom
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.
aras785
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
teom
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.
aras785
Niestety nie jestem w stanie Ci pomóc. Spróbuj na stackoverlow dodając w pytaniu przykładową bazę (http://sqlfiddle.com/)
gitbejbe
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.