Autor Zpráva
Lion76
Profil *
Zdravim, mam tento dotaz, ktery vypise radky spravne

SELECT SQL_CALC_FOUND_ROWS MIN(t2.sloupec) AS sloupec1, MAX(t2.sloupec) AS sloupec2, COUNT(t2.sloupec) AS sloupec3, COUNT(t2.sloupec) AS sloupec4, COUNT(t2.sloupec) AS sloupec5, COUNT(t2.sloupec) AS sloupec6 FROM tabulka1 AS t1 LEFT JOIN tabulka2 AS t2 USING (sloupec) WHERE t1.sloupec LIKE '001%' GROUP BY t1.sloupec

, ale kdyz napr. pridam

SELECT SQL_CALC_FOUND_ROWS ......................... WHERE t1.sloupec LIKE '001%' AND tb2.sloupec IS NOT NULL

tak uz se radky nevypisi spravne. Proc tomu tak je? Je lepsi pro tento zpusob pouzit poddotazy nebo vyse uvedene spojeni?
Kajman_
Profil *
Před pár hodinami to tu bylo také... Podmínky na druhou tabulku pro linkování dávejte do join podmínky.

left join tabulka2 as t2 on t2.sloupec=t1.sloupec and t2.slupec is not null

A pokud nechcete null hodnoty, pokud se nic odpovídajícího nenajde, tak většinou stačí smazat to slovo left.
Lion76
Profil *
Kajman_

Ja vim, tu diskusi jsem cetl a taky to nepomohlo. Vyse nabidnute reseni take nevypisuje data spravne.

Potrebuji nasleduji reseni:

spojit tabulku1 a tabulku2 podle id, pokud bude splnena podminka if(isset($_POST['typ']) && $_POST['typ'] != '0'), tak do dotazu pripojit podminku, ktera urci, ze se maji vybrat vsechny radky, ktere nemaji nulovy soucet radku urciteho sloupce a musi platit jen pro ten urcity sloupec, ostatni sloupce se musi vypsat, i kdyz maji nulovou hodnotu.
Kajman_
Profil *
vsechny radky, ktere nemaji nulovy soucet radku urciteho sloupce

having sum(urcity_sloupec)!=0

A k tomu zbytku - moc nechápu, co vlastně chcete a kde máte problém. Zkuste napsat jednoduchý příklad těch dvou tabulek a požadovaný výsledek.
Lion76
Profil *
Kajman_

I kdyz jsme to spolecne vyresili tou klauzuli HAVING, tak ve strucnosti napisi o co se mne vlastne jednalo, treba nalezneme lepsi reseni. :o)

Data v tabulce1:

id | Isloupec1 |
1 | neco 1 |
2 | neco 2 |

Data v tabulce2:

id | IIsloupec1| IIsloupec2| IIsloupec3| IIsloupec4|
1 | 2 | 0 | 1 | 0 |
2 | 5 | 1 | 0 | 1 |
1 | 7 | 1 | 0 | 0 |
2 | 8 | 0 | 1 | 1 |


$sql = "SELECT SQL_CALC_FOUND_ROWS t1.Isloupec1 AS nazev, MIN(t2.IIsloupec1) AS min, MAX(t2.IIsloupec1) AS max, COUNT(t2.II.sloupec2) pocet1, COUNT(t2.II.sloupec3) AS pocet2, COUNT(t2.II.sloupec4) AS pocet3 FROM tabulka1 AS t1 LEFT JOIN tabulka2 AS t2 USING (id) GROUP BY t1.Isloupec1";

Vypise:

nazev | min | max | pocet1 | pocet2 | pocet3|
neco1 | 2 | 7 | 1 | 1 | 0 |
neco2 | 5 | 8 | 1 | 1 | 2 |

A ted jsem chtel z tohoto seskupeneho vypisu vybrat napr. vsechny radky, ktere neobsahuji ve sloupci "pocet3" nulove hodnoty podle podminky.

Takze dotaz bude vypadat nasledovne:

$sql = "SELECT SQL_CALC_FOUND_ROWS .......... ";

$sql .= "GROUP BY t1.Isloupec1";

if(isset($_POST['typ'])){
$sql .= " HAVING COUNT(t2.".$_POST['typ'].") != '0'";
}

Vypise zadouci vysledek:

nazev | min | max | pocet1 | pocet2 | pocet3|
neco2 | 5 | 8 | 1 | 1 | 2 |

Moje chyba, ze jsem hned nenapsal, ze chci vybirat az v seskupenem vypisu, neokradal bych Vas o cas. Pokud Vas napada lepsi reseni, tak sem s nim, rad se necemu priucim, v opacnem pripade dekuji za pomoc, muzete toto tema uzamknout.
Kajman_
Profil *
O ničem lepším nevím, jen count dvou řádku s nulou by měl dát v příkladu dvojku. Count dvou hodnot s hodnotou null dá nulu. Pokud chcete sčítat a ne počítat výskyt nenullových hodnot, použijte sum místo count.

Ale když to funguje, tak s tím asi nebude problém :-)
Kajman_
Profil *
A na v podmínce se sum by vlastně mělo být

having ifnull(sum(sloupecek),0)!=0
Toto téma je uzamčeno. Odpověď nelze zaslat.

0