Jump to content
Sign in to follow this  
chesterduh

Update records - PHP/SQL

Recommended Posts

chesterduh

Boa noite pessoal, tenho aqui uma dúvida e esperava que alguém me pudesse ajudar.

Tenho uma tabela de cerca de 30K endereços de email que pretendo enviar uma newsletter. Para evitar ter o endereço de email listado com spam terei de enviar em parcelas de numero ainda a definir.

Para seleccionar por exemplo, os primeiros 50 endereços de email para os quais ainda não tenha sido enviada a newsletter tenho o seguinte código:

$query=mysql_query('SELECT address FROM email WHERE sent = 0 ORDER BY ID LIMIT 0,50');

De seguida envia a newsletter e pronto, está tudo a funcionar direitinho.

Como é óbvio, depois de enviar para estes 50 endereços, pretendo alterar a coluna "sent" para 1, de modo a não voltar a enviar de novo.

Alguém sabe a melhor maneira de fazer esta alteração exactamente para os mesmos 50 endereços que foram previamente seleccionados?

Agradecia imenso a vossa ajuda

Cumprimentos,

Chester

Share this post


Link to post
Share on other sites
mjamado

Ao iterar pelos resultados para enviar, vais guardando os ID dos registos num array numérico. No final do ciclo, fazes:

$query = mysql_query("UPDATE email SET sent = 1 WHERE ID IN (" . implode(", ", $array_ids) . ")");

Numa nota relacionada, não é a quantidade de envios por espaço de tempo que te vai por a salvo de seres marcado como spammer; se existirem duas ou três queixas para o SpamCop, por exemplo, estás lixado. E as sanções vão subindo de tom (aviso, 48 horas offline e por aí fora) até ficares com o IP da máquina queimado.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
Battousai

Outra opção seria:

UPDATE email
SET sent = 1
WHERE sent = 0
ORDER BY id ASC
LIMIT 50

Share this post


Link to post
Share on other sites
chesterduh

Pessoal obrigado pelas vossas respostas! mjamado experimentei a tua opção mas não resultou, devo estar a fazer alguma coisa mal relacionado com a variável que está a armazenar os endereços seleccionados na 1ª query:

$query=mysql_query('SELECT adress FROM email WHERE sent = 0 ORDER BY ID LIMIT 0,10');
while($row = mysql_fetch_array($query))
{

foreach ($row as &$value) {

echo '<p>Mensagem enviada com sucesso para: '.$value.'!</p>';
$update=mysql_query('UPDATE email SET sent = 1 WHERE adress IN (" . implode(", ", $value) . ")') or die (mysql_error());

Não me está a dar erro nenhum mas também não está a alterar o campo sent para 1 , o que achas que estou a fazer mal? Já agora obg pela tua opinião em relação ao resto!!  :)

Battousai, experimentei também a tua opção e resultou cinco estrelas! obg  :)

Share this post


Link to post
Share on other sites
chesterduh

Battousai, afinal não está a funcionar como pretendia..  :)

$update=mysql_query('UPDATE email SET sent = 1 WHERE sent= 0 ORDER BY ID ASC LIMIT 50'); 

Está a alterar-me todos os records da coluna "sent" para 1 em vez de apenas os primeiros 50 que têm 0..

Aconselhas-me alguma coisa?

Obg,

Chester

Share this post


Link to post
Share on other sites
chesterduh

Battousai, está resolvido.. Estava a colocar a query onde não devia estar, agora sim está 5 estrelas..

Obg!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.