Autor Zpráva
sqlnoob
Profil *
Ahoj borci, prepsal by mi nekdo tento dotaz do kultivovanejsi podoby s joinem?

select p.*,  
(select COUNT(*) from tabulka where sloupec=p.id) count,
(select sloupec1 from tabulka where sloupec=p.id order by id desc) sloupec1,
(select sloupec2 from tabulka where sloupec=p.id order by id desc) sloupec2
from tabulka p where p.id_get='$get' and sloupec=0


Tento dotaz dela nasledujici:
Je to jedna tabulka z ktere vypisuji vse kdyz id_get se rovna hodnote z GET a sloupec se rovna 0
zaroven chci ziskat nejaka data (count, sloupec1, sloupec2) z te same tabulky, ale kdyz sloupec se rovna id z tabulky kde sloupec je 0

tabulka vypada takto:
id, id_get, sloupec, sloupec1, sloupec2
data:
1,1,0,neco,neco2
2,1,1,neco,neco2
3,1,1,neco,neco2

doufam, ze to chapete, protoze moc nevim jak to vysvetlit
sqlnoob
Profil *
jeste bych to mohl vysvetlit jinak:

kdyz bych to mel takhle:

$db = mysql_query("select * from tabulka where id_get='$get' and sloupec=0");
while($row = mysql_fetch_assoc($db)) {
   $id = $row["id"];

$count = (select COUNT(*) from tabulka where sloupec='$id');
$sloupec1 = (select sloupec1 from tabulka where sloupec='$id' order by id desc);
$sloupec2 = (select sloupec2 from tabulka where sloupec='$id' order by id desc);
}
sqlnoob
Profil *
Tak jsem zjistil, ze ten muj dotaz nefunguje. Tudiz prepsal by mi to nekdo prosim do funkcni podoby?
xmark
Profil
Když ti za tři dny nikdo neodpověděl, znamená to, že tady není nikdo, kdo by pochopil, co vlastně chceš. Zkus to přeformulovat.
Kromě toho:
- používej diakritiku
- používej pro název vlákna výstižný nadpis
- piš tak, aby to trochu dávalo smysl. Tvoje věta "kdyz bych to mel takhle:" smysl nedává. Nediv se, že ti nikdo neodpoví.
sqlnoob
Profil *
tabulka v db:
ID, ID_GET, SLOUPEC, SLOUPEC1, SLOUPEC2
data v db:
1,1,0,xx,xx
2,1,1,xx,xx
3,2,0,xx,xx
4,1,1,xx,xx

ted potrebuju vypsat vsechno kdyz hodnota ziskana z getu bude rovna ID_GET a sloupec = 0
tzn. select * from tabulka where id_get=$get and sloupec=0

a zaroven potrebuju udelat dotaz:
select COUNT(*),sloupec1,sloupec2 from tabulka where sloupec=ID Z MINULYHO DOTAZU order by id desc

muj pozadavany vysledek je:
id
Tori
Profil
Tohle? Vycházím z toho, že první dotaz může vrátit víc odpovídajících řádků.
SELECT * FROM tabulka WHERE id_get = $get AND sloupec = 0

SELECT COUNT(*) pocet, sloupec1, sloupec2 FROM tabulka 
      WHERE sloupec IN (SELECT id FROM tabulka WHERE id_get = $get AND sloupec = 0)
      GROUP BY sloupec

edit: až teď se mi zobrazil příspěvek ↑, takže mažu zbytečné otázky.
sqlnoob
Profil *
xmark:
"to kdyz bych to mel takhle" je ale podle me celkem nejjasnejsi vysvetleni, protoze to je jeden dotaz kterej mne whilem vypise data a k nim ziska ty pozadovany. Ten dotaz kterej tam mam rozepsanej na 4 dotazy bych potreboval dostat na jeden
sqlnoob
Profil *
Tori:

no, mozny to je (zkusim), ale neslo by to nejak hezcejc pomoci joinu?
xmark
Profil
sqlnoob:
"to kdyz bych to mel takhle" je ale podle me celkem nejjasnejsi vysvetleni

Nevysvětluje to vůbec nic. Nedává to smysl ani natolik, aby bylo zřejmé, jestli celý ten příspěvek je otázka (na co?), nebo nedokončené souvětí, zamýšlené jako oznamovací.
Ale to už je jedno, nebudu tě učit česky.
sqlnoob
Profil *
no dobre jeste by za tou ukazkou melo byt pokracovani vety: kdyz bych to mel takhle UKAZKA tak by to fungovalo, ale ja to chci v jednom dotazu
sqlnoob
Profil *
Zdravim, tak jsem to prepsal jeste takhle:

SELECT p.nazev,p.id,        
    (SELECT sloupec1 FROM tabulka WHERE sloupec=p.id ORDER BY id DESC LIMIT 1) sloupec1,
    (SELECT sloupec2 FROM tabulka WHERE sloupec=p.id ORDER BY id DESC LIMIT 1) sloupec2,
    (SELECT COUNT(*) FROM tabulka WHERE id_prispevek=p.id ) pocet        
    
    FROM tabulka p WHERE p.id_get='".$get."' AND p.sloupec=0


toto reseni je funkcni, ale mne se nelibi, respektive pry mysql to pomalu zpracovava. Dalo by se to prepsat nejak napr. s joinama?
Kajman_
Profil *
Kolik to vrátí řádků? Podle p.id_get tipuji že jen jeden, potom tyto korelované poddotazy mohou být rychlejší než join, možná to bude na stejno.

A jak moc to pomalu zpracovává? Jak vypadá explain? Máte indexy na filtrovaných sloupečcích?
sqlnoob
Profil *
vysledku bude nekolik ne jen jeden
explain netusim co je
indexy nemam
sqlnoob
Profil *
sqlnoob:

respektive to bude ve whilu takze to vrati nekolik radku kdyz id_get=$get
ted to pomalu nezpracovava nebo na mym localhostu kde to vraci 2 radky je to ok
sqlnoob
Profil *
nejde tedy ten dotaz nejak prepsat na min dotazu?
Kajman_
Profil *
Dotazy kladené ve while cyklu bývají větším problémem než korelované poddotazy na jednom řádku. Takže optimalizujte tam.
sqlnoob
Profil *
a jak jinak nez whilem se da ziskat vice radku z databaze?

a tato cast by nesla nejak na jeden dotaz?
    (SELECT sloupec1 FROM tabulka WHERE sloupec=p.id ORDER BY id DESC LIMIT 1) sloupec1,
    (SELECT sloupec2 FROM tabulka WHERE sloupec=p.id ORDER BY id DESC LIMIT 1) sloupec2,
    (SELECT COUNT(*) FROM tabulka WHERE id_prispevek=p.id ) pocet   

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: