Skocz do zawartości

Wybieranie danych z mysql przy użyciu alfabetu


Dominik23

Rekomendowane odpowiedzi

Chciałbym, aby użytkownicy odwiedzający moją site, mieli możliwość wybierania rekordów według danej litery alfabetu.

Stronicowanie już zrobiłem, teraz tylko chciałbym za pomocą ABCD..

Dodałem do zapytania dodatkowo: LIKE '$l%'

zapytanie wygląda tak:

$query = "SELECT * FROM $tablica WHERE 'nazwa1' LIKE '$l%' ORDER BY 'ID' DESC LIMIT $beginning, $podziel";

Reszta dodatkowego kodu:

$litera = array("a","b","c","ć","d","e","f","g","h","i","j","k","l","ł","m","n","o","ó","p","r","s","ś","t","u","v","w","x","y","z");

for ($i=0; $i<=28; $i++){

echo "<a href=https://miodzio.net?dzial=baza&str=firm2&l=".$litera[$i].">$litera[$i]</a>";

if($i=="28"){ echo"<br><br>"; }

else { echo " | "; }}

Mam wyłączoną kontrole błędów, więc nie wiem w czym problem.

Macie jakieś sugestie, albo pomysł na kod wybierającego rekord za pomocą Liter alfabetu??

Witryna Biznesu - najlepsza promocja biznesu w sieci.

Odnośnik do komentarza
Udostępnij na innych stronach

To koniecznie musisz dodać w swojej ofercie na stronie informacje dla potencjalnego klienta, że nie potraficie robić najprostszych rzeczy z szeroko pojętej "optymalizacja istniejących stron aktualizacja istniejących serwisów"

:);)

Już nie wspominając o zmiennej z GET jako zmiennej globalnej w Twoim kodzie... I klasycznym błędzie jakim jest umieszczanie danych w cudzysłowniu podwójnym co wymusza na parserze php przeszukiwanie pod kontem zmiennych do podstawienia:

$cos=1;
$ar = array("x$cos");
echo $ar[0].'<br />';
$ar = array('x$cos');
echo $ar[0];

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Mion nie przesadzaj, wstawianie danych do podwójnego cudzysłowu nie jest żadnym błędem takie "przeszukiwanie" jak to określasz na wydajność ma wpływ dokładnie żaden. Zbyt duży narzut apache i CGI. Gwarantuję, że kod C który tego "szuka" wykonuje się dość szybko - żeby się o to nie martwić.

Równie dobrze mogę się dopieprzyć o to, że lepiej używać zmiennych globalnych niż $_GET, bo dobranie się do określonej wartości w tablicy hashy zabiera czas procesora :) (i w dodatku więcej niż liniowe przeszukiwanie ciągu). Wcięcia w kodzie to pewnie też głupota, bo parser musi przez to przejść w poszukiwaniu następnej instrukcji do wykonania.

Optymalizacja wydajności nie polega na optymalizowaniu fragmentów które nie mają wpływu na czas wykonywania programu. Jeśli twierdzisz, że użycie innego typu cudzysłowu to błąd lub rozwiązanie nieoptymalne to niestety ty nie masz o tym pojęcia.

Co do problemu: albo like albo tabela pomocnicza zawierająca przedziały dla poszczególnych liter (jeśli dane odpowiednio posortowane). Łatwo to wygenerować zapytaniem SQL.

Co do możliwego błędu - spróbuj usunąć cudzysłowy z 'ID' po order by albo zastąpić ` `.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli twierdzisz, że użycie innego typu cudzysłowu to błąd lub rozwiązanie nieoptymalne to niestety ty nie masz o tym pojęcia.
W takim razie ty pozostań przy swoim pojęciu (a raczej jego braku) a ja pozostanę przy swoim...

Standardy programowania w PHP.

Zamiana podwójnych cudzysłowów na apostrofy daje kilka procent zysku.

ale pewnie autorzy tekstu też nie mają pojęcia o tym co tam piszą ;)

Co do możliwego błędu - spróbuj usunąć cudzysłowy z 'ID' po order by albo zastąpić ` `.
Klauzula ORDER BY działa również z podaniem nazwy kolumny w apostrofach choć nie spotkałem się nigdzie z takim zapisem... A kod może nie działać własnie z powodu wyłączenia register_globals. Zastosuj zmienną $_GET['l'];

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Mion w jednym się zgadzamy: autorzy tekstu niestety mają nikłe pojęcie o optymalizacji skryptów (lub żadne). Niestety wykonanie instrukcji w języku niskopoziomowym (np. C/ASM) zabiera promil czasu który ta sama operacja zajmuje w J wysokiego poziomu (np. PHP).

Masz 10 zmiennych i wybór 10 stringów i 10 operatorów konkatenacji albo 1 string. Już na oko widać, że 20 operacji w PHP będzie wolniejsze niż to samo, kiedy zrobi to parser napisany w C.

No to na szybko zrobiłem porównanie czegoś takiego:

$v = "{$a_}, {$b_}, {$c_}, {$a_}, {$b_}, {$c_}, {$a_}, {$b_}, {$c_}, {$a_}, {$b_}, {$c_}";

$v = $a_.','.$b_.','.$c_.$a_.','.$b_.','.$c_.$a_.','.$b_.','.$c_.$a_.','.$b_.','.$c_;

x 10 000

t1: 0.0972509384155

t2: 0.123234033585

Nie dość, że masz kod którego nie da się po ludzku zmodyfikować to działa wolniej. Teraz mi pokaż skrypt, w którym jest 1000 operacji na stringach ;) A 10000? W świetle takiego tekstu używanie jakiegokolwiek systemu szablonów czy frameworku to zbrodnia przeciwko ludzkości. Przecież to skanuje cały szablon za pomocą wolnego PHP, nie tylko jakiś mały fragment lub/i dokłada mnóstwo tekstu do przeparsowania.

Poza tym i tak mi się wydaje, że można aspekt wydajności pominąć i pisać tak jak _jest_wygodniej_ bo skrypt będzie się wykonywał parę mikrosekund (nawet nie milisekund) szybciej a kiedy przyjdzie ci modyfikować taki śmietnik jak druga linijka to będzie płacz i zgrzytanie zębów ;)

A jak już się mamy zastanawiać nad wydajnością (co nie ma raczej sensu bo wydajność jednego i drugiego sposobu nie ma absolutnie znaczenia) to przydałoby się jakieś rozsądne porównanie a nie stwierdzenie: "z kosmosu i mojego wypasionego wzoru wynika, że to jest 15% szybsze"

Różne są wersje PHP i pod różnymi może rożnie działać. Jakaś rozsądna maszyna testowa i coś lepszego do pomiaru niż microtime(..) by się przydało żeby w ogóle o tym gadać, np. na php.net są pomiary dowodzące, że podwójny cudzysłów jest szybszy:

https://pl.php.net/types.string

Odnośnik do komentarza
Udostępnij na innych stronach

Trzymajcie się standardów, a bedzie mniej problemów

Dla MySQL:

nazwy tablic i rekordów w takich cudzysłowiach: `tablica`

nazwy zmiennych tekstowych w takich: 'tekst'

a nazwy zmiennych liczbowych bez cudzysłowia.

Dla PHP: odpowiednie łączenie stringów

$query = "SELECT * FROM `".$tablica."` WHERE `nazwa1` LIKE '".$_GET['l']."%' ORDER BY `ID` DESC LIMIT ".$beginning.",".$podziel;

Jeżeli komuś taki zapis mieni się w oczach zawsze może zrobić

echo $query;

i zobaczyć czym karmi MySQL'a

.

Odnośnik do komentarza
Udostępnij na innych stronach

Yavaho jeśli już chcesz na siłę używać operatorów . to nie rozumiem po co ci te podwójne cudzysłowy. Faktycznie czytelność tego okropna, co do SQL to racja jednak w specyfikacji PHP nigdzie nie ma mowy że takie łączenie stringów to standard. Wybrałeś z resztą najgorszy możliwy sposób.

$query = "SELECT * FROM `{$tablica}` WHERE `nazwa1` LIKE '{$_GET['l']}%' ORDER BY `ID` DESC LIMIT {$beginning}, {$podziel}";

Od razu lepiej wygląda i teoretycznie szybciej się wykonuje :D

Odnośnik do komentarza
Udostępnij na innych stronach

Czy ja coś chcę na siłę ?

A na pewno nie wdam się w rozmowę kogo metoda jest lepsza, tylko kogo jest poprawna :D

Wybrałem najgorszy możliwy sposób? A dlaczego nie przedstawiłeś lepszego wcześniej tylko wzorowałeś się na moim zamieniając tylko cudzysłowia? Moge od razu odpowiedzieć: bo innego nie ma.

Kod napisany według pewnych standardów musi zadziałać poprawie, błędy powstają tylko z bałaganu.

ps

Zanim odpowiesz przeczytaj drugie moje zdanie.

.

Odnośnik do komentarza
Udostępnij na innych stronach

A na pewno nie wdam się w rozmowę kogo metoda jest lepsza, tylko kogo jest poprawna

Na moje oko wszystkie metody tutaj przedstawione są poprawne, bo: 1. działają, 2. IDE zenda tak "twierdzi", np. poprzez udostępnianiu w tych miejscach code completion i odpowiednim kolorowaniu składni. Wychodzę z założenia że twórcy PHP wiedzą najlepiej. Twierdzisz, że któraś jest niepoprawna: daj link. Tylko najlepiej do jakiegoś uznanego źródła, lub chodziaż do dokumentu napisanego z sensem i "na czasie" o tym co jest nie tak z artykułem na binboy nie będę pisał bo się zrobi offtopic offtopica ;)

A dlaczego nie przedstawiłeś lepszego wcześniej tylko wzorowałeś się na moim zamieniając tylko cudzysłowia?

Właśnie cudzysłowów nie zmieniłem, tylko usunąłem operatory.

Lepszy przedstawiłem w poprzednim poście. Jest prosty, czytelny i bardzo łatwo go zmienić. Wiesz najlepszy kod to taki który nie wymaga komentarza i jak do niego wracasz po 2 miesiącach to wiesz co robi po jego przeczytaniu. Ty piszesz, że można zrobić echo "jak się komuś mieni w oczach". Jak się mieni w oczach to trzeba to przepisać na coś co się nie mieni.

No sorry będziesz czytając kod robił echo w co drugim zapytaniu? Może w co drugiej linijce? A co z ludźmi którzy nie pisali tego kodu? Też mają przeglądać pliki po kilka K linii i wpisywać echo wszędzie? Ile czasu na to stracą? Ile więcej błędów popełnią przy modyfikacji?

Oczywiście możesz tak pisać to jak najbardziej poprawne, tylko nie mów, że pisanie takiego nieczytelnego kodu jest dobrym standardem bo paru ludzi tu wejdzie, przeczyta i zaczną tak pisać a później się złapią za głowę jak przyjdzie im albo komuś innemu poprawiać taki "piękny ustandaryzowany kod" :) Ja jak widzę taki bigos to dostaję białej gorączki. Gorsze jest tylko wsadzanie tagów PHP do takiego stringu albo brak wcięć, jeszcze tylko pare kropek które dodają do tego zmienne PHP i taki kod można szybciej napisać od nowa niż go zrozumieć czytając... chyba, że kiedyś powstanie IDE które zmienia taką poszatkowaną postać na coś co jest czytelne dla istoty ludzkiej :)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności