Topic: Dubliuojanciu irasu uzfiksavimas tarp dvieju ir daugiau lenteliu

Sveiki,

Biski strigau. Istraukiant duomenis is mysql, noriu paryskinti eilutes, kuriose vieno stulpelio reiksmes yra vienodos (dubliuojasi).

Mazdaug taip:

ID, Pavadinimas

1 - AAA
2 - BBB
2 - CCC
3 - DDD

Siuo atveju dvi eilutes su ID = 2 turetu buti pazymetos kita spalva.

Vienas is rekomenduojamu sprendimu butu daryti kazka tokio:

select id, pavadinimas, t.skaicius
from table 
join (select id, count(id) as skaicius from table group by id) as t 
on table.id=t.id

Ir gauti:

ID, Pavadinimas, Skaicius

1 - AAA - 1
2 - BBB - 2
2 - CCC - 2
3 - DDD - 1

O ka daryti jeigu turi ne viena lentele, bet dvieju lenteliu jungini? t.y. turi ne table bet "table1 join table2".

Toks bajeris nepraeina (tmptable does not exist):

select * from
(
select id, pavadinimas
from table1 join table2 using (id)
) as tmptable

join (select id, count(id) as skaicius from tmptable group by id) as t 
on tmptable.id=t.id

Kaip man pagriebti dvieju sujungtu lenteliu rezultata, kad poto per ji praskanuoti ir surasti tuos irasus kurie dubliuojasi ir tada juos atvaizduoti naujame stulpelyje?

Dekavoju

Re: Dubliuojanciu irasu uzfiksavimas tarp dvieju ir daugiau lenteliu

Jei tau tereikia tik atvaizduoti kita spalva, vietoj subužklausų ir jungimų tiesiog php du kartus prasukti ciklą?

for $rows as $row 
  $count[$row['id']]++;


for $rows as $row 
  if ($count[$row['id']] > 0) echo "Kartojosi {$row['id']}";

Re: Dubliuojanciu irasu uzfiksavimas tarp dvieju ir daugiau lenteliu

Taip, cia irgi yra alternatyvus pagrindines problemos sprendimo budas. Netgi galbut siek tiek greitesnis :)