Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> nie da się prościej?like a%, like b% ...
lovefool
post 27.12.2003, 16:25:17
Post #1





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 19.05.2003
Skąd: Millhaven

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


Witam!
Mam liste piosenek ułożoną alfabetycznie...Chodzi o to aby przy tych zaczynających sie na 'a' była duża literka 'A' przy tych na 'b' - 'B' itd...
A więc jest tak:
[sql:1:a7b0f2982d]
<?
if(!is_numeric($_GET["id"]))
{
echo "A<br>";
if($q=mysql_query("SELECT id, nazwy FROM piosenki WHERE nazwy LIKE 'a%' ORDER BY nazwy ASC "))
{
while($t=mysql_fetch_array($q))
{
echo "<a href="teksty?id=".$t["id"]."">".$t["nazwy"]."</a><br>";
}
}
else
{
echo "Bład zapytania. Bład: ".mysql_error();
}

}
else
{

if($q=mysql_query("SELECT nazwy, teksty FROM piosenki WHERE id='".$_GET["id"]."'"))
{
$t=mysql_fetch_array($q);
echo "<font size="2"><b>".$t["nazwy"]."</a></font><br><br>";
echo $t["teksty"];
}
else
{
echo "Bład zapytania. Bład: ".mysql_error();
}
}
?> [/sql:1:a7b0f2982d]

I teraz pytanie: by napisać to samo do 'B' 'C' ... trzeba cały kod powtarzać czy może da się to jakoś łatwiej załatwić ?

pozdrawiam


--------------------
Tak kochamy marzenia, że boimy się je realizować ...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
itsme
post 27.12.2003, 17:43:39
Post #2





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




pierwsze
[sql:1:3378103c3e]
"INSERT INTO piosenki ( nazwy, ......, pierwsza_litera ) VALUES (". $_POST['nazwa'].", ... ,LCASE( LEFT( ".$_POST['nazwa'].", 1 ) ) )"[/sql:1:3378103c3e]
jest to zapytanie przy dodawaniu nowego rekordu. Istotne jest to ze musisz miec dodatkowa kolumne o nazwie [b]pierwsza_litera
.
LCASE - na poziomie mySQL-a zamienia wszystkie litery łańcucha znaków na małe
LEFT - wyciąga określony ciąg znaków z łańcucha zaczynając od lewej strony a kończąc na określonym liczbowo - w tym wypadku jest to pierwszy znak.
drugie
w zmiennej $_GET['id'] daj litere alfabetu a, b ....... w ...
[sql:1:3378103c3e]
"SELECT * FROM piosenki where pierwsza_litera='LCASE( LEFT( ".$_GET['id'].", 1 ) )'"
[/sql:1:3378103c3e]
w przypadku gdyby ktos napisal w get wiecej znakow i tak zapytanie mysql je okroi i zamieni na male litery.
plusy i minusy
- dodawanie piosenki bedzie trwało troche wiecej czasu ale w zwiazku z tym ze to bedzie tylko 1 rekord to roznica nie bedzie miala znaczenia
+ wyszukiwanie po znaku a, b ....... w z pominienciem LIKE w znacznym stopmniu przyspieszy dzialanie mysql i nie bedziesz mial juz problemow z wielka litera A czy tez mala a.

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 17:02