• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PHP

Problemas com PHP-MySQL

13 mensagens neste tópico

Preciso que o meu script vá verificar à base de dados todas as datas DIFERENTES numa array.

O problema é que se eu procurar com mysql_fetch_array, dá-me todas as datas, e não apenas uma versão de cada. Por exemplo, cada data é formatada em H:i:s, portanto se houverem 2 que digam 22:51:12 e 5 que digam 22:11:54, só quero que a array tenha 1 de 22:51:12 e outra de 22:11:54 e não todas elas. Depois disso faço um while para cada resultado dessa array procurar na DB os dados com essa data. Se houvessem 2 resultados diferentes de duas datas iguais, iria repetir a mesma acção diversas vezes, o que não é realmente muito prático (imaginem se houverem 100 resultados com datas iguais, iria ser algo mesmo inpraticável).

Se me consegui exprimir bem, por favor respondam o mais cedo possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei muito bem se percebi a tua dúvida, mas ela parece-me mais de SQL do que de PHP.

Tens vários operadores em SQL que deves explorar pois creio que te são úteis (pelo que compreendi da tua dúvida): count, group by, distinct e in.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, pretendo remover todos os dados duplicados, ficando apenas com uma cópia de cada dado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT distinct campo FROM tabela

tu queres é remover os campos repetidos numa tabela? ficando um exemplar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já descobri como fazer, existe uma funçao em PHP para isso:

array_unique($array);

Mas tenho outro problema:

Em MySQL:

$responses_query = mysql_query('SELECT date FROM `'.$mysql_prefix.'formresponsefields` WHERE formid LIKE \''.$_GET['form'].'\' LIMIT 0, 30 '); // Get the dates to unduplicate.

Isto dá direito, se eu fizer print, imprime um código perfeito que o PhpMyAdmin executa sem erros. No entanto, quando saco como array e faço um loop, aquilo simplesmente repete o primeiro resultado. SEMPRE. Porque é que não dá?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
$responses_query = mysql_query('SELECT date FROM `'.$mysql_prefix.'formresponsefields` WHERE formid LIKE \''.$_GET['form'].'\' LIMIT 0, 30 '); // Get the dates to unduplicate.

while ($array = mysql_fetch_array($responses_query, MYSQL_BOTH)) {
	$form_responses = mysql_query('SELECT `key`, ip '
. ' FROM '.$mysql_prefix.'formresponsefields '
. ' WHERE date LIKE \''.$array['date'].'\' LIMIT 0, 300 ') or die(mysql_error()); // Get the key and IP.
$keys_IP = mysql_fetch_array($form_responses, MYSQL_BOTH);
print "Response $responsenumber:<br><br>";
$responsenumber++;
while ($key = $keys_IP) {
	$ips = $key['ip'];
	$text = $key['key'];
	print "Field $fieldnumber (By $ips): $text<br>";
	$fieldnumber++;
}
print "<br><br><hr>";
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz agora outra coisa:

$responses_query = mysql_query('SELECT distinct date FROM `'.$mysql_prefix.'formresponsefields` WHERE formid LIKE \''.$_GET['form'].'\' LIMIT 0, 30 ');
$array = mysql_fetch_array($responses_query, MYSQL_ASSOC);	
foreach ($array as 	$date) {
print "$date<br>";
}

E agora só me dá um resultado, em vez de repetir infinitas vezes o mesmo resultado. Porque é que não funciona?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz agora outra coisa:

$responses_query = mysql_query('SELECT distinct date FROM `'.$mysql_prefix.'formresponsefields` WHERE formid LIKE \''.$_GET['form'].'\' LIMIT 0, 30 ');
$array = mysql_fetch_array($responses_query, MYSQL_ASSOC);	
foreach ($array as 	$date) {
print "$date<br>";
}

E agora só me dá um resultado, em vez de repetir infinitas vezes o mesmo resultado. Porque é que não funciona?

Faz me um favor , faz lá isto :

echo count($array);

antes de foreach e depois faz exit();

Quantos valores retornou ele ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já resolvi o problema...

$responses_query = mysql_query('SELECT distinct date FROM `'.$mysql_prefix.'formresponsefields` WHERE formid LIKE \''.$_GET['form'].'\'');

while ($result = mysql_fetch_array($responses_query, MYSQL_ASSOC)) {

foreach ($result as  $date) {

      print "Reply number $responsenumber (Posted on $date)<br><br>";

      $responsenumber++;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, podes me explicar o que é $mysql_prefix . 'formresponsefields' ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, podes me explicar o que é $mysql_prefix . 'formresponsefields' ?

Boas Gurzi,

$mysql_prefix, nesse exemplo é uma variavel que tem um prefixo para as tabelas da base de dados. É útil caso queiras ter várias aplicações na mesma bd, ajuda a compreender de que aplicação pertence determinada tabela e evita problemas caso existam tabelas com o mesmo nome em ambas as aplicações.

Venho um bocado (bom bocado) tarde, mas espero ser útil :thumbsup:

Abraço,

milks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora