Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zamiana tekstu dla ostatnich rekordow tablicy - jak?
lukass
post 2.07.2003, 02:51:13
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


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!
Go to the top of the page
+Quote Post
scanner
post 2.07.2003, 06:36:33
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




[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]


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
lukass
post 2.07.2003, 11:03:58
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


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.
Go to the top of the page
+Quote Post
uboottd
post 2.07.2003, 13:32:49
Post #4





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Wiesz naturalnie o tym, ze dziala to po tej zmianie przez przypadek i predzej czy pozniej najprawdopodobniej przestanie ?
Go to the top of the page
+Quote Post
lukass
post 2.07.2003, 13:36:26
Post #5





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


A dlaczego?
Go to the top of the page
+Quote Post
uboottd
post 2.07.2003, 20:53:43
Post #6





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


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.
Go to the top of the page
+Quote Post
lukass
post 2.07.2003, 21:57:11
Post #7





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


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).
Go to the top of the page
+Quote Post
scanner
post 2.07.2003, 23:43:42
Post #8





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
lukass
post 2.07.2003, 23:48:31
Post #9





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


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
Go to the top of the page
+Quote Post
scanner
post 2.07.2003, 23:54:11
Post #10





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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).


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
lukass
post 3.07.2003, 00:48:44
Post #11





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


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
Go to the top of the page
+Quote Post
spenalzo
post 3.07.2003, 01:17:16
Post #12





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


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]


--------------------

Go to the top of the page
+Quote Post
lukass
post 4.07.2003, 02:50:39
Post #13





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


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?
Go to the top of the page
+Quote Post
menic
post 7.07.2003, 23:04:44
Post #14





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


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


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
lukass
post 8.07.2003, 01:17:14
Post #15





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 20.03.2002

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


Tzn jak to mozna zrobic?
Go to the top of the page
+Quote Post

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: 19.07.2025 - 05:30