![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam problem z ponizszym zapytaniem SQL, pierwsze 3 rekordy dla litery A wyciaga poprawnie, pozniej sie sypie z bledem o nieprawidlowym argumencie dla foreach(). Chce, aby kolejno z bazy zawodnikow wyciagane byly nazwiska zaczynajace sie na kolejne litery alfabetu i wyswietlane: A nazwiska na A B nazwiska na B itd. [php:1:efb69e4755] <?php $ar = 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<count($ar); $i++ ) { $pl_loop[] = $i; $smarty->assign("pl_loop", $pl_loop ); $smarty->assign("pl_litera", $ar ); $litera = $ar[$i]; $res = $db->get_results("SELECT playerID,pl_name,pl_surname FROM pro_players WHERE pl_surname LIKE '".$litera."%'"); foreach( $res as $player ) { $pl_id[] = $player->playerID; $pl[] = "$player->pl_surname, $player->pl_name"; } // ... ?> [/php:1:efb69e4755] Probowalem: [sql:1:efb69e4755] SELECT playerID,pl_name,pl_surname FROM pro_players WHERE pl_surname LIKE '".$litera."%' SELECT playerID,pl_name,pl_surname FROM pro_players WHERE pl_surname LIKE '$litera%' SELECT playerID,pl_name,pl_surname FROM pro_players WHERE pl_surname REGEXP '^$litera.*' SELECT playerID,pl_name,pl_surname FROM pro_players WHERE pl_surname REGEXP '^$litera.*' SELECT playerID,pl_name,pl_surname FROM pro_players WHERE pl_surname REGEXP '^".$litera.".*'[/sql:1:efb69e4755] |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mam problem z ponizszym zapytaniem SQL, pierwsze 3 rekordy dla litery A wyciaga poprawnie, pozniej sie sypie z bledem o nieprawidlowym argumencie dla foreach().
Samo zapytanie jest poprawne. Problem jest w PHPie. Nie wiem jakiej klasy jest obiekt $db ani jakiego typu wynik zwraca jego metoda get_results. Sprawdź czy napewno zwraca ona tablicę i zobacz czy masz tam dostępną jakąś metodę zwracającą status zapytania. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zapomnialem dopisac. Obiekt $db to obiekt zwracany przez klase Ez_SQL.
Kod $db->get_results
$db->get_results – get multiple row result set from the database (or previously cached results) Description array $db->get_results(string query / null [, OBJECT / ARRAY_A / ARRAY_N ] ) $db->get_row() gets multiple rows of results from the database based on query and returns them as a multi dimensional array. Each element of the array contains one row of results and can be specified to be either an object, associative array or numerical array. If no results are found then the function returns false enabling you to use the function within logic statements such as if. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 29.06.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
[php:1:ea58198961]<?php
$res = $db->get_results("SELECT playerID,pl_name,pl_surname FROM pro_players ORDER by pl_surname "); ?>[/php:1:ea58198961] Powinno wyciągać alfabetycznie. Chyba, że nie o to ci chodzi... -------------------- if(function_exists("zrozum_kobiete")){
echo "Niemożliwe!"; exit;} |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 15.05.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
hmm
ja zrobil bym to tak: [php:1:547f9e8aad]<?php $literki = 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"); $tmp = array(); foreach($literki as $litera) { $r = mysql_query("select nazwisko from tabela where nazwisko like '".$litera."%'"); $tmp2 = array(); while($t = mysql_fetch_assoc($r)) { array_push($tmp2,array("nazwisko" =>$t[nazwisko])); } array_push($tmp,array("litera" => $litera,"nazwiska" => $tmp2)); } $smarty -> assign('dane',$tmp); ?>[/php:1:547f9e8aad] a w tpl'u Kod {section name=l loop=$dane}
<b>{$dane[l].litera}<br> {section name=t $dane[l].nazwiska} {$dane[l].nazwiska[t].nazwisko}<br> {sectionelse} Brak nazwisk na {$dane[l].litera}<br> {/section} <hr> {/section} zapodaj do tego swoje style obslugi bazy danej i powinno dzialac, chyba ze gdzies jakas literowke zrobilem ... |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 17.04.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@ hary
Dziekuje, pomoglo ![]() Wina byla nie po stronie klasy do obslugi MySQL, ale po stronie niejako Smarty i mojej ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Ja bym powiedzial ze tylko po Twojej ;P
Mam jeszcze inne (wydaje mi sie ze wydajniejsze) rozwiazanie, ale nie dam gotowca bo za 15 minut wyjezdzam, wiec opisze tylko schemat.. - wyciagamy wszystko jednym zapytaniem sortujac oczywiscie alafabetycznie, z tym ze dodatkowo z kazdego rekordu wyciagamy pierwsza litere nazwiska jako osobne pole (substringiem czy czyms z mysql'a), przyjmijmy ze dajemy tej literce alias 'literka' (tworcze co? ![]() - korzystamy z dobrodziejstwa smarty i mozliwosci odnoszenia sie do poprzedniego/nastepnego elementu w tablicy, czyli cos takiego: Kod {section name=l loop=$dane}
{if $smarty.section.l.index == 0 || $dane[l.index_prev].literka != $dane[l].literka} <b>{$dane[l].literka}<br> {/if} {$dane[l].nazwisko}<br> <hr> {/section} Nie dam glowy, ze nie ma w tym kodzie bledow, bo pisalem na szybko i z glowy, ale chyba powinno byc ok. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
ja tego typu rzeczy trobię tak:
W podanym przykladzie mamy dodatkową kolumnę w bazie, o nazwie rok, którą wyświetlamy tak jak ty chcesz wyświetlać swoją literę alfabetu. Kod {section loop=$arrListaArt name=i}
{if $arrListaArt[i].rok != $rok} {if $rok} </ul> {/if} {assign var="rok" value=$arrListaArt[i].rok} <br /> <span class="tekst" style="font-size: 12pt; color: #181750; font-weight: bold;"> {$arrListaArt[i].rok} </span> <ul class="tekst"> {/if} <li><a href="{$arrListaArt[i].link}">{$arrListaArt[i].nazwa}</a></li> {/section} </ul> -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:18 |