Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Aktualizacja wartości jednym zapytaniem z nietypową budową tabeli w bazie
Majkelo23
post
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

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


Jak przy takiej budowie tabeli:

Cytat
config_name | config_value
nazwa _______________ 1
nazwa2 _______________ 343434
nazwa3_______________ ifejfiesfjesifj


Zaktualizować za jednym zamachem wszystkie rekordy? Przy aktualizacji jednego, wyglądałoby to tak:

  1. UPDATE `config` SET config_value = 'wartosc' WHERE config_name = 'nazwa';


Da się jakoś skonstruować to zapytanie tak, aby XX takich rekordów zaktualizować za jednym zamachem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Majkelo23
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

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


A jeśli chcę pojedyncze rekordy zmieniać w pojedynczych polach? To zapytanie ma wyglądać tak:

  1. UPDATE `config` SET config_value IN ('wartosc', 'wartosc2', 'wartosc') WHERE config_name IN ('n1', 'n2', 'n3');


(IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
bostaf
post
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(Majkelo23 @ 22.05.2012, 07:56:22 ) *
A jeśli chcę pojedyncze rekordy zmieniać w pojedynczych polach? To zapytanie ma wyglądać tak:

  1. UPDATE `config` SET config_value IN ('wartosc', 'wartosc2', 'wartosc') WHERE config_name IN ('n1', 'n2', 'n3');


(IMG:style_emoticons/default/questionmark.gif)

Nie. Klauzuli IN można używać tylko wewnątrz klauzuli WHERE. Wyrażenie SET musi mieć konkretną wartość z dozwolonego zakresu typów wartości.

A odpowiadając na pierwsze pytanie: jeśli wartości są różne dla każdego wpisu to nie da się. Nie da się czystym zapytaniem MySQL. Ale jeśli możesz wykorzystać PHP, to mógłbyś posłużyć się PDO, spreparować zapytanie i wykonać je w pętli dla tablicy wartości:
  1. $dane = array (
  2. 'nazwa1' => 'wartość',
  3. 'nazwa 2' => 'coś innego',
  4. 'n4m3' => 'v4lu3'
  5. );
  6. $stmt = $dbh->prepare("UPDATE `config` SET `config_value` = ? WHERE `config_name` = ?");
  7. foreach($dane as $nazwa => $wartosc) {
  8. $stmt->execute(array($wartosc, $nazwa));
  9. }

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 17:29