Skocz do zawartości

Kopiowanie rekordu ze zmianą 2 pól


Makary155

Rekomendowane odpowiedzi

Mam tabelę która ma bardzo dużo kolumn. Teraz chcę zrobic kopię jednego rekordu zmieniając wartość tylko dwóch pól. Pierwsze pole ma primary key i nie może być skopiowane.

Dałoby radę jakoś krócej niż:

INSERT INTO table SELECT NULL, "tu wartość którą chce zmienić", "tu inna wartość jaką chce zmienić", pole3, pole4, pole5...poleX where cośtam

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Spróbuj tak: w phpmy adminie co prawda powoduje to wyswietlanie dwóch kolumn o tej samej nazwie... ale moze zadziała.

 

INSERT INTO table SELECT *, NULL as pole0, "tu wartość którą chce zmienić" as pole1, "tu inna wartość jaką chce zmienić" as pole2 where cośtam

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj tak: w phpmy adminie co prawda powoduje to wyswietlanie dwóch kolumn o tej samej nazwie... ale moze zadziała.

 

INSERT INTO table SELECT *, NULL as pole0, "tu wartość którą chce zmienić" as pole1, "tu inna wartość jaką chce zmienić" as pole2 where cośtam

 

Mysql workbench wyświetla errora w tym zapytaniu. Na necie znalazłem coś takiego:

 

function DuplicateMySQLRecord ($table, $key_field, $key_value) {
// Get the names of all fields/columns in the table
$query = 'SHOW COLUMNS FROM ' . $table . ';';
$results = mysql_query($query);

// Generate the duplication query with those fields except the key
$query = 'INSERT INTO ' . $table . ' (SELECT ';

while ($row = mysql_fetch_array($results)) {
if ($row[0] == $key_field) {
$query .= 'NULL, ';
} else {
$query .= $row[0] . ', ';
} // END IF
} // END WHILE

$query = substr($query, 0, strlen($query) - 2);
$query .= ' FROM ' . $table . ' WHERE ' . $key_field . ' = "' . $key_value . '")';
mysql_query($query);

// Return the new id
$new_id = mysql_insert_id();
return $new_id;
}

http://www.epigroove.com/posts/79/how_to_d...mysql_using_php

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Bo zjadłem FROM, to chyba widać. Myslalem, ze chcesz sobie to zrobić samym SQLem, z pomoca PHPa to z palcem w dupsztalu sie robi:

 

<?php

$result = mysql_query("SELECT * FROM tabela WHERE kolumna = 1");
$row = mysql_fetch_assoc($result);
unset($row['kolumna']); //taka sama nazwa jak po WHERE

$row['pole1'] = 'wartosc'; //podmieniamy

// zabezpieczamy
foreach ($row as $k => $v){
    $row[$k]='\'' . mysql_real_escape_string($v) . '\'';
}

mysql_query("INSERT INTO (" . implode(', ', array_keys($row)) .") VALUES (" . implode(', ', array_values($row)) .");");

 

A korzystając z Active Recordów jakiejś prostej biblioteki do bazy danych to już w ogóle kaszka z mleczkiem, dziś się już mysql_query nie uzywa. Zend_DB, Propel, Doctrine, Redbean czy wbudowane w frameworki rozwiazania, które obsługują PDO i rekordy jako obiekty. Szybciej i sprawniej na modelach sie pracuje.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...