Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana tekstu dla ostatnich rekordow tablicy - jak?
Forum PHP.pl > Forum > Bazy danych > MySQL
lukass
Witam

Mam taki kodzik:

[php:1:3de730dc56]<?
$query = "SELECT * FROM tabela WHERE costam ORDER BY costam";
$wynik = mysql_query($query);

while($rzad = mysql_fetch_array($wynik)) {

echo "<TR>n"
."<TD align=center>".$rzad['id']."</TD>n"
."<TD align=center>".$rzad['nazwa']."</TD>n"
."</TR>"
}
echo "</TABLE>";

?>[/php:1:3de730dc56]

No i teraz mam walek, chcialem aby 15 ostatnich rekordow ($rzad['nazwa']) bylo wyswietlane jako pogrubiony tekst.

Nie udalo mi sie uzyc do tego MAX() ani COUNT(), jesli ktos bedzie znal rozwiazanie bardzo bym prosil o odpowiedz!
scanner
[php:1:648375546a]<?
$query = "SELECT * FROM tabela WHERE costam ORDER BY costam";
$wynik = mysql_query($query);
$intSqlRows = mysql_num_rows();
$intLastFifteen = $intSqlRows - 15;
$intLoopCounter = 1;

while($rzad = mysql_fetch_array($wynik))
{
echo "<TR>n";
echo "<TD align=center>".$rzad['id']."</TD>n";
if($intLoopCounter <= $intLastFifteen) // "<=" lub "==" - jeszcze sie nie obudzilem
{
echo "<TD align=center>".$rzad['nazwa']."</TD>n";
}
else
{
echo "<TD align=center><b>".$rzad['nazwa']."</b></TD>n";
}
echo "</TR>";
$intLoopCounter++;
}
echo "</TABLE>";
?>[/php:1:648375546a]
lukass
bedzie '>' smile.gif)) ale dziekuje bardzo za pomoc!!

A teraz poprawiona wersja (i dzialajaca)

[php:1:4f2357992b]<?
$query = "SELECT * FROM tabela WHERE costam ORDER BY costam";
$wynik = mysql_query($query);
$intSqlRows = mysql_num_rows($wynik);
$intLastFifteen = $intSqlRows - 15;

while($rzad = mysql_fetch_array($wynik))
{
$intMark = $rzad['id'];
echo "<TR>n";
echo "<TD align=center>".$rzad['id']."</TD>n";
if($intMark > $intLastFifteen)
{
echo "<TD align=center><b>".$rzad['nazwa']."</b></TD>n";
}
else
{
echo "<TD align=center>".$rzad['nazwa']."</TD>n";
}
echo "</TR>";
}
echo "</TABLE>";
?>
[/php:1:4f2357992b]

Zamienilem inkrementacje na wartosc $id, poniewaz przy zmianie sortowania wyswietlal ostatnie 15 rekordow a nie 15 ostatnich rekordow w tabeli.

Dziekuje w kazdym razie za naprowadzenie mnie na wlasciwy tor.
uboottd
Wiesz naturalnie o tym, ze dziala to po tej zmianie przez przypadek i predzej czy pozniej najprawdopodobniej przestanie ?
lukass
A dlaczego?
uboottd
Bo dzialanie skryptu jest scisle zalezne od zalozenia, ze id-ki w bazie zawsze beda wszystkie (bez dziur) i zawsze bedzie dawal taki warunke po where ze beda sie wszystkie lapac. Zastanow sie jak to zadziala jak po jakichs porzadkach w bazie zostana wiersze od id z przedzialu 20-40 i zadne inne.
lukass
Hmm juz odpowiem...

Taka sytuacja nie bedzie miala miejsca... dlatego ze jesli zawartosc nie bedzie potrzebna zostanie zamieniona na inna wartosc, czyli zamiast dokladanie nowego wiersza bede zamienial niepotrzebny na nowy...

Zreszta po tym zorientowalem sie ze mam klopot cos tak jak ty mowisz

Mam baze programow, filmow i gier (oznaczone w polu typ jako - 1,2,3) i teraz mam zagwozdke jak zrobic aby 5 najwiekszych id (dla kazdego typu) bylo wyrozniane...

To ma pewny zwiazek z tym co mowisz, w kazdym razie ten skrypt bedzie dzialal bo on ma ograniczenia a ja mam pewne tez ograniczenia (nalozone aby to zadzialalo).
scanner
Cytat
Taka sytuacja nie bedzie miala miejsca... dlatego ze jesli zawartosc nie bedzie potrzebna zostanie zamieniona na inna wartosc, czyli zamiast dokladanie nowego wiersza bede zamienial niepotrzebny na nowy...
Jeśłi tak chcesz robić, to idź lepiej zajmij się ogrodnictwem. Replace to so bie na kartce papieru możesz robić, a nie w bazie, gdzie możesz miec jakies relacje miedzy rekordami i tabelami.
lukass
Po pierwsze nie lubie takiego tonu...
Po drugie robie tak jak tylko potrafie
Po trzecie nie robie REPLACE tylko UPDATE
Po czwarte nie ma relacji miedzy rekordami czy tabelami (bo jest tylko jedna tabela)
Po piate moja kobieta zajmuje sie ogrodnictwem, wiec to zly pomysl smile.gif
scanner
1. Nie masz pojęcia jakim tonem się do Ciebie zwracam
2. Więc korzystaj z rad innych, szczególnie jesli mają dobre pomysły
3. Czym skorupka za młodu nasiąknie tym na starośc trąci - za miesiąc będziesz miał pomysł, żeby dorzucić drugą tabelę i klękniesz na źle działającym skrypcie.
4. Puty dzban wode nosił, póki mu się ucho nie urwało
5. Zawsze mielibyście wspólne hobby (wbrew pozorom nie wyśmiewam się z ogrodnictwa).
lukass
Cytat
1. Nie masz pojęcia jakim tonem się do Ciebie zwracam

Widze co czytam

Cytat
2. Więc korzystaj z rad innych, szczególnie jesli mają dobre pomysły


Narazie nie zauwazylem zadnej tylko niemile zwrocenie uwagi...
Cytat
3. Czym skorupka za młodu nasiąknie tym na starośc trąci - za miesiąc będziesz miał pomysł, żeby dorzucić drugą tabelę i klękniesz na źle działającym skrypcie.

No coz ja bynajmniej mysle o mozliwych update'ach za wczasu, a to co tu omawiamy to maly pikus (pare linijek kodu, ktore zawsze mozna wywalic bez wiekszego klopotu)

W kazdym razie masz racje w pewnych czesciach, ale tak jak mowilem narazie to dziala w taki sposob i nic z tym nie bedzie robione...

A dwa posty wczesniej zadalem pytanie jak to obejsc aby dzialalo w normalnej sytuacji i takiej w jakiej ty to przedstawiles... wiec jest jakas rada na to?

Mialem dwa pomysly:

Brac rekordy jak leca (gdzie typ ma odpowiednio wartosc 1,2,3) zamieniac ich wlasciwe ID na liczbe kolejnosci w jakiej sie je wyciagnelo (twoje $intLoopCounter) z bazy, przesortowac wg alfabetu (czy czego kolwiek) i pozniej bedziemy sie odnosic do kolejnosci w momencie gdy bedziemy chcieli zaznaczyc 5 ostatnich rekordow.

Wiec czekam na rade smile.gif
spenalzo
Znaj łaskę pana:
[php:1:9a4f0391ab]<?php
$query = "SELECT * FROM tabela WHERE costam ORDER BY costam";
$wynik = mysql_query($query);
$ile=mysql_num_rows($query);
for($i=0; $i<$ile; $i++)
{
mysql_data_seek($query,$i);
$t=mysql_fetch_array($query);
if($i<($ile-15)
{
echo "<TR>n<TD align=center><b>".$t["id"]."</b>";
echo "</TD>n<TD align=center><b>".$t["nazwa"]."</b>";
echo "</TD>n</TR>";
}
else
{
echo "<TR>n<TD align=center>".$t["id"]."</TD>n";
echo "<TD align=center>".$t["nazwa"]."</TD>n</TR>";
}
}
?>[/php:1:9a4f0391ab]
lukass
No niestety Panie to nie dziala jak powinno - dziala ze pogrubia ostatnie 15 ktore wyciagnal z bazy (wg kolejnosci alfabetycznej a nie wg ID)...

Poprawione (zeby cokolwiek wypisywalo):
[php:1:48eb962294]

<?php
$query = "SELECT * FROM tabela WHERE costam ORDER BY costam";
$wynik = mysql_query($query);
$ile=mysql_num_rows($wynik);
for($i=0; $i<$ile; $i++)
{
mysql_data_seek($query,$i);
$t=mysql_fetch_array($wynik);
if($i<($ile-15))
{
echo "<TR>n<TD align=center><b>".$t["id"]."</b>";
echo "</TD>n<TD align=center><b>".$t["nazwa"]."</b>";
echo "</TD>n</TR>";
}
else
{
echo "<TR>n<TD align=center>".$t["id"]."</TD>n";
echo "<TD align=center>".$t["nazwa"]."</TD>n</TR>";
}
}
?>

[/php:1:48eb962294]
Dopiero jak w zapytaniu dam sorotwanie wg ID to pokazuje prawidlowo, teraz jak zrobic zeby po przeleceniu tego posorotwalo spowrotem w nazwy?
menic
Cytat
Dopiero jak w zapytaniu dam sorotwanie wg ID to pokazuje prawidlowo, teraz jak zrobic zeby po przeleceniu tego posorotwalo spowrotem w nazwy?

Nie możesz już tego zrobić. Nie możesz wrócić wzwyż i zmienić sposób sortowania
lukass
Tzn jak to mozna zrobic?
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-2025 Invision Power Services, Inc.