Fonksiyonları çoktur kaç SQL Güncellemeleri

3 Cevap php

Ben bazı metin üzerinde yapılacak (çoğunlukla 64k metin türü alanları, ama potansiyel olarak bence de bazı MEDIUMTEXT alanlar, 4MB içerebilir?) Sahip güncellemeleri alanları (aslında, bir arama aşırı bir dizi var ve bir senaryo var ) bu alanları değiştirin.

Here is how I know how to do it, but am unsure if this is the best approach.

PHP ve MySQL kullanarak, genel olarak, ben böyle bir şey (SQL kodu PHP koduna sarılmış değil, ama fikir olsun) yapardı:

SELECT id, some_text_row FROM table WHERE some_text_row LIKE '%some phrase%'

Bu potansiyel olarak on satır binlerce dönmek olabilir.

Sonra, ben böyle bir şey yapardı:

$row['some_text_row'] = str_replace( 'some phrase', 
                                     'some other phrase', 
                                     $row['some_text_row'] );
UPDATE table 
SET some_text_row = "{$row['some_text_row']}" 
WHERE id="{$row['id']'}"
LIMIT 1;

Ve dediğim gibi, bu on güncellemeleri binlerce olabilir.

Bir güncelleme bu büyük için tecrübeye sahip değil, I am wondering if there is a better approach to this, ya da, on-binlerce satır gerçekten bir sorun (ki bu durumda, soru, kaç satır bir sorun olacağını değil ise .)

Teşekkürler.

3 Cevap

Ben SQL uzman değilim, ama bir göz MySQL isteyebilirsiniz string functions. Onlar (sadece değiştirmek yapıyoruz çünkü) bir SQL deyiminde her şeyi yapmak için izin verebilir.

Gibi bir şey:

UPDATE `table` 
SET some_text_row = replace(some_text_row, 'some phrase', 'some other phrase') 
WHERE some_text_row LIKE '%some phrase%';

Bunu yaparken tepe kullanımı yapıyorsanız size toplu güncelleştirmeleri gerçekleştirmek isteyecektir.

1000 birim gruplar ayrıldı.

  1. Parti için güncelleştirmeyi uygulayın.
  2. Birkaç dakika Uyku.
  3. Sonraki toplu tekrarlayın.

Bir UPDATE ifadeleri birleştirmek istiyorsanız, geçici bir tabloya her zaman toplu insert can, ve sonra tek bir açıklamada geçici tablodan mevcut tablo UPDATE.

örneğin:

CREATE TEMPORARY TABLE my_tmp (id INTEGER, new_value TEXT);
INSERT INTO my_tmp VALUES (1, 'new string'), (2, 'another new string'), ...;
UPDATE table SET some_text_row = new_value FROM my_tmp WHERE my_tmp.id = table.id;

Eğer güncellemeleri onbinlerce arıyorsanız, bu muhtemelen vb yuvarlak gezilerinde, sorgu ayrıştırma, size çok zaman kazandıracak

Eğer saf SQL ihtiyacınız ne yapabilirim eğer Tim'in çözümü kesinlikle üstündür. Ama bazen gerçekleştirmek için gereken bu strateji tercih olabilir bu durumda SQL makul yapabileceğiniz daha karmaşık, bu satırları binlerce dönüşümü.