Autor | Zpráva | ||
---|---|---|---|
Lion76 Profil * |
#1 · Zasláno: 18. 11. 2007, 19:25:50
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 * |
#2 · Zasláno: 18. 11. 2007, 20:18:38
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 * |
#3 · Zasláno: 18. 11. 2007, 21:24:45
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 * |
#4 · Zasláno: 19. 11. 2007, 09:07:50
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 * |
#5 · Zasláno: 20. 11. 2007, 03:00:31
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 * |
#6 · Zasláno: 20. 11. 2007, 09:21:11
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 * |
#7 · Zasláno: 20. 11. 2007, 09:23:19
A na v podmínce se sum by vlastně mělo být
having ifnull(sum(sloupecek),0)!=0 |
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0