Update kliku pól o takim samym ID różnymi wartościami wygenerowanymi przez funkcję

0

Cześć,

Nie wiem jak ugryźć problem opisany w temacie, poniżej wklejam zapytanie SQL, mam nadzieję że pomożecie:)

Funkcja generuje mi ciąg randomowych znaków w postaci: XXXX-XX-XXXX

 
    if(isset($_GET['id']) and ($_GET['il'])){
	$id = $_GET['id'];
	$il = $_GET['il'];
	
    function NewGuid() { 
    $s = strtoupper(md5(uniqid(rand(),true))); 
    $guidText = 
        substr($s,0,4) . '-' . 
        substr($s,4,2) . '-' . 
        substr($s,12,4); 
    return $guidText;
	}

	
	mysql_query("UPDATE `SHOP_ORDER` SET `status` = 'active', `date_act` = curdate() WHERE `nrzam` = '$id'");
	for($i=0;$i<$il;$i++){
	mysql_query("UPDATE `GWAR_SHOP` SET `nrgwar` = '".NewGuid()."'  WHERE `nrzam` = '$id'");	
	}

}
0

Z tego co widzę w update to to nie jest id tylko numer zamówienie co oczywiście nie jest kluczem głównym. Skoro musisz podmienić dane w pierwszych n elementach oznaczonych "$il" z numerem zamówienia "$id". Pobierz najpierw identyfikatory z tablicy "GWAR_SHOP" z limitem na "$il". A później przeleć w pętli po każdym id i zrób update dla każdego rekordu osobno.

0

To co napisałeś w temacie nic nie wyjaśnia. Można by pomyśleć, że masz w tabeli kilka wierszy o takim samym numerze w kolumnie id co jest raczej niemożliwe. Sprawa się dopiero nieco wyjaśnia gdy spojrzy się w kod (choc mogły by tam być lepsze wcięcia wewnątrz if, function i for) i widać, że chodzi o kolumnę nrzam a nie kolumnę id.

W ostatnim UPDATE jeśli chcesz różnym polom nadać różne dane to musisz je jakoś rozróżnić w zapytaniu - każdy z tych wierszy w tabeli GWAR_SHOP ma przecież swój własny numer w kolumnie id. Może należało by najpierw pobrać te numery z kolumny id i potem w UPDATE podawać za każdym razem inny numery wiersza.

0

Jeżeli generowanie tego twojego "guida" wrzucisz w samo zapytanie to nie będzie potrzebna żadna pętla - wywołanie "rand()" w SQL będzie zwracało inne liczby dla kolejnych wierszy.

0

Napisz sobie funkcję w MySQL. Wszystkie z powyższych są w SQL: MD5, UUID, RAND().
Wywołując w SQL dla każdego wiersza dostaniesz inną wartość

0
Rev napisał(a):

Jeżeli generowanie tego twojego "guida" wrzucisz w samo zapytanie to nie będzie potrzebna żadna pętla - wywołanie "rand()" w SQL będzie zwracało inne liczby dla kolejnych wierszy.

Rev, mógłbyś mi napisać jak to rozumiesz za pomocą kodu?
Dzięki

0

tym razem wstawiłem funkcję w pętlę i UPDATE'uje mi się tylko jeden wiersz:

Jakies pomysly?

 for($i=0;$i<$il;$i++){
	
		$w = mysql_query("SELECT * FROM `GWAR_SHOP`");
		$r = mysql_fetch_row($w);
		$id = $r[0];
			if(!function_exists('NewGuid')){
				function NewGuid() { 
					$s = strtoupper(md5(uniqid(rand(),true))); 
					$guidText = 
						substr($s,0,4) . '-' . 
						substr($s,4,2) . '-' . 
						substr($s,12,4); 
					return $guidText;
					}
					}
		$nr = NewGuid();			
		mysql_query("UPDATE `GWAR_SHOP` SET `nrgwar` = '$nr'  WHERE `nrzam` = '$nrzam' and `id` = '$id'");	
	}
}
1

Za każdym przebiegiem pętli wykonujesz zapytanie. A powinieneś je wykonac PRZED pętlą a w pętli pobnierać kolejne rekordy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1