Jump to content
Sign in to follow this  
tiko165

Select depois de um "GROUP BY"

Recommended Posts

tiko165

Bom dia,

Estou a fazer umas querys ao qual, está a deixar-me agora um pouco baralhado.

Tenho uma query com um "GROUP BY", isto para, mostrar uns resultados sem os repetir. Até aqui tudo bem, está conforme eu pretendo.

De seguida, adicionei um "SELECT * FROM" com um "WHERE" referente aos ID's dados pela Query anterior.

Algo do genero:

$query11=$db->prepare("SELECT * FROM tableX GROUP BY `id_fix` ASC");
$query11->execute();
while ($groupBy=$yearCoin->fetch()){
 $query22=$db->prepare("SELECT * FROM tableX WHERE id_fix=? ORDER BY id_fix ASC");
 $query22->bindparam(1, $groupBy['id1']);
 $query22->execute();
 $selectFetch=$query22->fetch();
 $selectCount=$query22->rowCount();

 if($selectFetch['id1']=='0'){
$QtdID=($selectCount+"4");
 }else{
$QtdID=$selectCount;
 }
 echo $groupBy['id_fix']."> Total:".$QtdID;
}

A minha ideia, é fazer a soma de cada query em cada while, e caso exista algum valor nesse Select em valor 0, somava 4. Caso contrario, somava o valor em questão.

Só que o meu problema nisto tudo, é que ele só está a fazer a leitura/soma apenas no ultimo resultado de cada while. Alguma sugestão?

Edited by tiko165

collectioneuro300px.png

Share this post


Link to post
Share on other sites
HappyHippyHippo

a tua explicação do intuito do que pretendes fazer não é clara, mas parece que o que pretendes é saber quantos registos existem com o id_fix igual a X

 SELECT `id_fix`,
        COUNT(*) as quantity
   FROM tableX
GROUP BY `id_fix`
ORDER BY `id_fix` ASC


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
tiko165

a tua explicação do intuito do que pretendes fazer não é clara, mas parece que o que pretendes é saber quantos registos existem com o id_fix igual a X

 SELECT `id_fix`,
	 COUNT(*) as quantity
FROM tableX
GROUP BY `id_fix`
ORDER BY `id_fix` ASC

Essa query não me parece que resulte, porque eu pretendo em primeiro pronto, mostrar uma listagem com de todos os resultados diferentes (Logo um select com Group By);

De seguida, ao lado de cada ID, pretendo mostrar o numero o numero de vezes que existe sobre esse ID. Mas pretendia somar um valor, por cada ID que retornasse "0". (Logo fiz outro select, pois com o Group By, só irá ler apenas um resultado)

Tentei explicar de outra forma. Espero que assim seja mais facil fazer entender :)


collectioneuro300px.png

Share this post


Link to post
Share on other sites
HappyHippyHippo

antes de tudo, o SQL que apresentei está correcto. a única coisa que não faz é essa soma que dizes querer fazer.

segundo, o que pretendes fazer não pode ser realizado sobre somente essa tabela porque se o id não se encontra referenciado, nunca irá aparecer qualquer que seja o query realizado.

o que necessitas fazer será:

     SELECT `tabley`.`id`,
            `tablex`.`id_fix`,
            SUM(`tablex`.`id_fix` is not null) as quantity,
            IF(SUM(`tablex`.`id_fix` is not null) = 0, 4, SUM(`tablex`.`id_fix` is not null)) as skewed_quantity
       FROM `tabley` LEFT JOIN `tablex` ON `tabley`.`id` = `tablex`.`id_fix`
   GROUP BY `tabley`.`id`
   ORDER BY `tabley`.`id` ASC


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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.