Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-09-05 13:28:29

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Mysql i Update rekordów

Witam! Mam taki problem odnośnie update rekordów w tabeli.
Mianowicie mam pustą tabelę i chciałem dodać pierwszy rekord z poziomu php.
Po dodaniu pole numer_rozliczenia przyjmuje wartość 1. Następnie dodaje drugi rekord
i w tym momencie pola numer_rozliczenia obydwa posiadają numer 2. Dodam trzeci
to wszystkie trzy mają numer 3.
Kod jest taki:

Kod:

            $zapytanie = "SELECT * FROM `".$dballname."test` WHERE user='$username' ";
                $wykonaj = mysql_query($zapytanie);
                    $i=1;
                    while($row = mysql_fetch_array($wykonaj))
                    {    
                    $ins = @mysql_query("UPDATE `".$dballname."test` SET numer_rozliczenia='$i'");
                    echo "TOO: ".$i;
                    $i++;    
                    }

natomiast komunikat TOO pokazuje mi:
TOO: 1 TOO: 2 TOO:3 po dodaniu już trzeciego rekordu.
Poprostu chciałbym aby przy dodawaniu nowego rekordu pole numer_rozliczenia było updatowane w ten sposób
że każdy najnowsz rekord przyjmować będzie numer 1 a reszta 2,3,4,5 itd.
Był bym wdzięczny za pomoc.


debbie
[color=blue]Wrócę jak zjem zupę i drugie danie - tyle[/color]
[color=blue]a oto ta zupa:[/color]

Offline

 

#2  2011-09-05 17:38:15

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Mysql i Update rekordów

Zdecyduj się najpierw czego chcesz. Najpierw napisałeś:

Po dodaniu pole numer_rozliczenia przyjmuje wartość 1. Następnie dodaje drugi rekord
i w tym momencie pola numer_rozliczenia obydwa posiadają numer 2. Dodam trzeci
to wszystkie trzy mają numer 3.[/quote]
a potem piszesz:

Poprostu chciałbym aby przy dodawaniu nowego rekordu pole numer_rozliczenia było updatowane w ten sposób
że każdy najnowsz rekord przyjmować będzie numer 1 a reszta 2,3,4,5 itd.[/quote]
To jak w końcu chcesz?

Co do echo TOO i wyników TOO: 1 TOO: 2 TOO:3. To nie rozumiem czemu się dziwisz, robisz zwykłą pętle (do tego nieskończoną, o zgrozo), w której wyświetlasz za każdym razem $i większe o 1. Czy masz tam zapytanie do bazy czy nie, nie ma ono wpływu na wartość $i. Jeśli chcesz sprawdzić co zrobił update to ten kod przecież tego nie sprawdza co chyba widać jak na dłoni.

Offline

 

#3  2011-09-05 17:47:30

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: Mysql i Update rekordów

Mianowicie mam pustą tabelę i chciałem dodać pierwszy rekord z poziomu php.
Po dodaniu pole numer_rozliczenia przyjmuje wartość 1. Następnie dodaje drugi rekord
i w tym momencie pola numer_rozliczenia obydwa posiadają numer 2. Dodam trzeci
to wszystkie trzy mają numer 3.[/quote]
Ale czemu takie sprawy chesz zaatwiać poprzez kod php. Wystarczy autoinkrementacja jakiegoś id i powinno Ci gadać.

Offline

 

#4  2011-09-06 10:53:45

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: Mysql i Update rekordów

No OK! Wiem że można załatwić to w pewnym stopniu autoinkrementacją ale po usunięciu będę miał luki.
Jeżeli chodzi i wypowiedź Kamikaze to po pierwsze:
Sory bo nie napisałem tego że:

Po dodaniu pole numer_rozliczenia przyjmuje wartość 1. Następnie dodaje drugi rekord
i w tym momencie pola numer_rozliczenia obydwa posiadają numer 2. Dodam trzeci
to wszystkie trzy mają numer 3.[/quote]
to to co się aktualnie dzieje dzięki temu kodowi który tam opisałem.
Ale chyba nie trudno się kapnąć.

a:

Poprostu chciałbym aby przy dodawaniu nowego rekordu pole numer_rozliczenia było updatowane w ten sposób
że każdy najnowsz rekord przyjmować będzie numer 1 a reszta 2,3,4,5 itd.[/quote]
to to co chciałem osiągnąć.

Pętla nie jest nie skończona tylko działa do momentu w którym select coś zwraca.
Jeśli są dwa rekordy to wyświetli:
TOO: 1 TOO: 2
Nie wiem gdzie tu widzisz nieskończoność?
Po trzecie to jak zwykle jesteś "pomocny" dlatego przy paru kombinacjach i przy uwzględnieniu tego że to ja pytałem
i sam sobie odpowiedziałem napisze ci jak to zrobić:

Kod:

$i = 1;
$wykonaj = mysql_query("SELECT * FROM `".$dballname."test` ORDER BY id DESC");    
if ($wykonaj && mysql_num_rows($wykonaj) > 0)
{
     while ($row = mysql_fetch_assoc($wykonaj))
     {        
            $id = $row['id'];
          mysql_query("UPDATE `".$dballname."pracy` SET numer_rozliczenia=$i WHERE id =$id");
          $i++ ;
     }
}

Oczywiście jest to forum! Rozwiązań na pewno może być wiele także jak masz pisać teksty typu:
" jestem super dobry programista moderator, zaloguje się i powiem co nie którym jacy są daremni..."
to lepiej nie pisz nic (szkoda miejsca ) bo bardziej mi pomógł hello_world który nasunął pomysł o autoinkrementacji.

Ostatnio edytowany przez debbie (2011-09-06 10:55:28)


debbie
[color=blue]Wrócę jak zjem zupę i drugie danie - tyle[/color]
[color=blue]a oto ta zupa:[/color]

Offline

 

#5  2011-09-06 12:01:42

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Mysql i Update rekordów

Fakt, pętla jest ok. Źle spojrzałem, bije się w piersi ;] Co do opisu twojego problemu, ciężko się domyśleć jak dwa razy piszesz, że coś byś chciał i opisujesz dwie różne rzeczy. To teraz wypada mi pamiętać, że za którymś razem twoje chciałbym to być może to jak już teraz masz. hello_world rzeczywiście podsunał ci pomysł ale chyba niezbyt dobrze z niego korzystasz. Chociaż właściwie chciałeś coś ala dekrementacja bo nowy wiersz ma mieć id 1, przy inkrementacji by miał numer kolejny. No ale ta dekrementacja to głupi pomysł, lepsza jest inkrementacja. A auto bierze się z tego, że zrobi to za ciebie baza danych, więc kod nad którym móżdzysz można wywalić bo nie jest potrzebny. Ustawiasz kolumne w tabeli jako autoinkrementowaną (zależnie od bazy danych różnie to się robi) i robisz inserty nie ustawiając id, które od tej pory będzie ustalać baza danych gdy wrzucisz wiersz do tej tabeli. Więc żadne update nie będzie już potrzebne. Myślę, że to będzie jednak pomocne bo raczej nie skumałeś co hello_world podsunał ;]

Offline

 

#6  2011-09-07 17:00:12

  ponury_kostek - Użytkownik

ponury_kostek
Użytkownik
Skąd: Wałbrzych
Zarejestrowany: 2007-01-02
Serwis

Re: Mysql i Update rekordów

Dodawanie nowego rozliczenia:

Kod:

$sql = 'UPDATE `' . $dballname . 'test` SET `numer_rozliczenia`=`numer_rozliczenia` + 1 WHERE `user`="' . $user . '"';
mysql_query($sql);
$sql = 'INSERT INTO `' . $dballname . 'test`(`user`, `numer_rozliczenia`) VALUES("' . $user . '", 1)';
mysql_query($sql);

Usuwanie wybranego rozliczenia:

Kod:

$sql = 'DELETE FROM `' . $dballname . 'test` WHERE `user`="' . $user . '" AND `numer_rozliczenia`=' . $numer_rozliczenia;
mysql_query($sql);
$sql = 'UPDATE `' . $dballname . 'test` SET `numer_rozliczenia`=`numer_rozliczenia` - 1 WHERE `user`="' . $username . '" AND `numer_rozliczenia` > ' . $numer_rozliczenia;
mysql_query($sql);

Offline

 

#7  2011-09-08 14:00:48

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: Mysql i Update rekordów

Dzięki za info! Teraz mam trochę inny problem! Tak czy tak udało mi się uzyskać efekt w którym każdy nowo dodany
rekord otrzymuje numer_rozliczenia='1'. I ok!

Kurdee alee zawaliłeem! Właśnie widze że tak tego nie rozwiąże!
Ma ktoś może pomysł na coś takiego że:

jednym z pól w bazie jest pole data ( RRRR.MM.DD)
I teraz musiał bym zrobić tak że po dodaniu rekordu wykonywany będzie UPDATE
tak że rekord w którym pole data jest datą najstarszą nadawać będzie polu numer_rozliczenia='1'
itd itd. Czyli np:

data             numer_rozliczenia
2011.09.01     1
2011.09.05     2
2011.09.07     3

a po dodaniu rekordu z datą np 2011.08.28:

data             numer_rozliczenia
2011.08.28     1
2011.09.01     2
2011.09.05     3
2011.09.07     4


Był bym wdzięczny za pomoc i sory za zamieszanie.

Ostatnio edytowany przez debbie (2011-09-08 17:58:22)


debbie
[color=blue]Wrócę jak zjem zupę i drugie danie - tyle[/color]
[color=blue]a oto ta zupa:[/color]

Offline

 

#8  2011-09-08 19:49:44

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Mysql i Update rekordów

Jeśli tak, proponowałbym nie przechowywać numeru rozliczenia. Taki numerek można dodać przy wyświetlaniu. Nie ma sensu go trzymać w bazie bo i tak się zmienia i nie można się na nim opierać. Co jest niezbyt logiczne, bo po co numer rozliczenia, który nie wskazuje jednoznacznie konkretnego rozliczenia, ale nie będę z tym dyskutował. Może powinieneś wszystko przemyśleć, może za dużo kombinujesz i powinieneś jeszcze raz spojrzeć na wymagania.

Offline

 

#9  2011-09-09 12:56:27

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: Mysql i Update rekordów

No właśnie chciałem to tak rozwiązać żeby za pomocą between w zapytaniu i pętli while zwiększać numer o 1 i wyświetlać sumę co krok!
Z datą jest już ciężej.


debbie
[color=blue]Wrócę jak zjem zupę i drugie danie - tyle[/color]
[color=blue]a oto ta zupa:[/color]

Offline

 

#10  2011-09-12 06:14:32

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: Mysql i Update rekordów

debbie, ale ty kombinujesz, zwe az zal patyrzec i zlituj sie nad nami.

robisz tak, AI w bazie, nastepmnie order by id desc, date desc a we frontendzie ladujesz id jak petla nakazuje, i gdzie tu jakikolwiek problem?


[img]http://intershock.pl/images/icons/freebsd.jpg[/img] [img]http://www.the-eleven.com/site_media/static/img/postgresql_powered.png[/img] [img]http://www.wwgmc.com/images/badge_php.gif[/img]
LRU #480459

Offline

 

#11  2011-09-12 06:45:59

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: Mysql i Update rekordów

Spoko! Wystarczyło sortowanie po dacie rosnąco przed update'm numerów i gra!
Dzięki za info! Sory bo trochę się zamieszało ale wolę pokazać już coś swojego i podrążyć problem
niż żeby później "ktoś" mi pisał że chcę gotowca! Dzięki jeszcze raz!


debbie
[color=blue]Wrócę jak zjem zupę i drugie danie - tyle[/color]
[color=blue]a oto ta zupa:[/color]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)

[ Generated in 0.013 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00012 SET CHARSET latin2
0.00007 SET NAMES latin2
0.00189 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.138.118.103' WHERE u.id=1
0.00136 UPDATE punbb_online SET logged=1716112198 WHERE ident='3.138.118.103'
0.00063 SELECT * FROM punbb_online WHERE logged<1716111898
0.00073 SELECT topic_id FROM punbb_posts WHERE id=181119
0.00227 SELECT id FROM punbb_posts WHERE topic_id=19634 ORDER BY posted
0.00086 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=19634 AND t.moved_to IS NULL
0.00014 SELECT search_for, replace_with FROM punbb_censoring
0.00098 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=19634 ORDER BY p.id LIMIT 0,25
0.00094 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=19634
Total query time: 0.00999 s