![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam
musze wykonac POZORNIE jak dla mnie prosta operacje na 2 tablicach w tablicy jos_comprofiler mam 3 pola cb_001 , cb_002 i cb_idwlasciciel jesli pola cb_002 i cb_idwlasciciel sie roznia od siebie wowczas w tablicy jos_users w polu 'block' ma zmienic wartosc 0 na 1 wg wspolnego mianownika cb_001 = username w tej chwili mam 1 uzytkownika, ktory ma rozne pola 'cb_002' i 'cb_idwlasciciel' i zamiast zmienic mi tylko jego zmienia mi wszystkich Kod //username tabela jos_users //block tabela jos_users //cb_001 tabela jos_comprofiler //cb_002 tabela jos_comprofiler //cb_idwlasciciel tabela jos_comprofiler mysql_select_db($db2,$connection1); // wybieram z tabel rekordy ktore maja zgodne cb_001=username ale rozne cb_002<>cb_idwlasciciel $sql ="SELECT * FROM jos_comprofiler, jos_users where jos_comprofiler.cb_001 = jos_users.username and jos_comprofiler.cb_002<>jos_comprofiler.cb_idwlasciciel"; $results = mysql_query($sql); while($rek = mysql_fetch_array($results)){ $usr = $rek['username']; $bl = $rek['block']; $cb001 = $rek['cb_001']; $cb002 = $rek['cb_002']; $cb_idw = $rek['cb_idwlasciciel']; // aktalizuj pole block w tabeli jos_user wowczas gdy rekordy ktore maja zgodne cb_001=username ale rozne cb_002<>cb_idwlasciciel mysql_query("UPDATE jos_users SET block = '1' where $cb002<>$cb_idw and $cb001=$usr ")or die("<br> jos_users not updated. Error is: " . mysql_error()); print $usr.' > '.$bl.' >'.$cb001.' > '.$cb002.' >'.$cb_idw.' '; } jakieś sugestie ? nie ma mocnych na ten problem ? nie no, serio nikt nie potrafi rozwiazac problemu ? Ten post edytował jaro74 30.01.2011, 15:27:15
Powód edycji: [Daiquiri]: Zamykam temat. Jak wymyślisz rozsądną nazwę/tytuł wątku - prześlij mi na PW, a temat zostanie odblokowany. Otwieram :)
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wyświetl sobie w przeglądarce oba zapytania:
i przypatrz się na sekcje WHERE. Podpowiem, że w pierwszym zapytaniu zbudowałeś tą sekcję prawidłowo, a w drugim masz kompletne bzdury ![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
wiem, ten warunek
Kod 6.$sql2 = "UPDATE jos_users SET block = '1' where $cb002<>$cb_idw and $cb001=$usr"; wygląda logicznie i NIE DZIAŁA (zamiast wybrane pozycje zamienia wszystkie ) z tego co wywnioskowałem w manulu where działa tylko w przypadku równości a nie różnic dla tego terzeba użyć w jakiś sposób CASE w tym przypadku poniższy kod też nie działa Kod mysql_query("UPDATE `jos_users` SET block = CASE WHEN ($cb002<>$cb_idw) THEN block = '1' WHEN ($cb002=$cb_idw) THEN block = '0' END"); jakieś propozycje ? Ten post edytował jaro74 5.02.2011, 09:00:15 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
wiem, ten warunek Kod 6.$sql2 = "UPDATE jos_users SET block = '1' where $cb002<>$cb_idw and $cb001=$usr"; wygląda logicznie i NIE DZIAŁA (zamiast wybrane pozycje zamienia wszystkie ) Coś mi mówi, że jednak nie chciało ci się wyświetlić tego zapytania przez echo. Zapytanie działa tak jak mu kazałeś, czyli zmienia wartość `block` w wierszach spełniających warunek. A jako że wszystkie wiersze spełniają ten warunek, to zmienia we wszystkich. Tak samo gdybyś napisał:
utworzyłbyś poprawnie działającą nieskończoną pętlę, nawet jeśli niekoniecznie o to ci chodziło. Podpowiem dwie rzeczy: 1. W zapytaniu UPDATE sekcja WHERE powinna wyglądać tak: kolumna = wartość a u ciebie wygląda tak: wartość = wartość 2. W pierwszym zapytaniu wyciągasz też z bazy klucz główny tabeli `jos_users` (pewnie jakieś jos_users.id) - przyda się w zapytaniu UPDATE Cytat z tego co wywnioskowałem w manulu where działa tylko w przypadku równości a nie różnic Działa w przypadku obu. Z resztą w tym pierwszym zapytaniu masz i równość i różnicę, a działa poprawnie. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzilem , nie zmienia , zmienia wszystkim na 1
napisz prosze całe rozwiązanie, od tygodnia się męczę z tym ![]() jos_comprofiler.cb_002<>jos_comprofiler.cb_idwlasciciel to samo co $cb002<>$cb_idw jos_users ___________________ username | block ___________________ kowalski | 1 wisniewski | 0 ___________________ jos_comprofiler ________________________________ cb_001 | cb_002 | cb_idwlasciciel ________________________________ kowalski | 00001 | 00234 wisniewski | 00002 | 00002 Kod $sql2 = "UPDATE jos_users SET block = '1' where jos_comprofiler.cb_001 = jos_users.username and jos_comprofiler.cb_002<>jos_comprofiler.cb_idwlasciciel" nie działa ![]() Ten post edytował jaro74 5.02.2011, 14:26:03 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat jos_comprofiler.cb_002<>jos_comprofiler.cb_idwlasciciel to samo co $cb002<>$cb_idw Nie. Jakbyś wyświetlił to zapytanie, to zauważyłbyś różnicę:
Jako że nie chce mi się już prowadzić tej dyskusji, to masz gotowca, który dodatkowo nie potrzebuje pierwszego zapytania ani pętli while:
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
wszystko sie rozchodzilo o to , ze w opcji UPDATE oprócz jos_users musiałem dodać jos_comprofiler
jos_users, jos_comprofiler SET jos_users.block = 1 już jest git , dzieki ps dziwne , ze od tygodnia nikt nie mogl mi tego wytlumaczyc na tym forum ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 04:18 |