c tam je, jen si musis zarolovat doprava :)
Příspěvky odeslané z IP adresy 2001:718:2601:1f7:204b:51...–
Uz to resim nejak s tim having. Ale nejak se mi to divne zacykluje, kdyz tam tu cast pridam.
On, cely ten dotaz je takovej divnej, proto to prepisuji. To psal kolega a v php se to ruzne generuje po castech. Uz jsem par veci vyhodil pres LEFT JOIN. Strustru je provazani na strukturu oddeleni.
Bez te casti, jak je HAVING, to udela blik 0.3s. Samotny HAVING spustny udela blik 0.2s. Ale, kdyz se to pusti takto, tak mu cas nejak nestaci :)
SELECT articles.*
FROM articles,
artstru
LEFT JOIN (strustru AS s1,strustru AS s2)
ON ( (
s1.referenceid=artstru.struaid
AND (
s1.referenceid=2))
OR (
s1.lowerid=artstru.struaid
AND (
s1.referenceid=2))
OR (
s1.lowerid=artstru.struaid
AND (
s2.higherid=2)
AND s2.referenceid=s1.referenceid))
WHERE r06_title IS NOT NULL
AND artstru.artsid=articles.idarticle
AND `articles`.`idarticle` IN
(
SELECT `aa`.`artaid`
FROM `artaut` `aa`
WHERE `aa`.`autaid` IN
(
SELECT `aut`.`idauthor`
FROM `authors` `aut`
WHERE MATCH(`aut`.`secondname`) against('torok* urbanec* bakala* sramkova* goluchova* kotrlova* hledik* urbancova* novotny*' IN boolean mode))
GROUP BY `aa`.`artaid`
HAVING count(*) >= 9 )
AND publishdate>='2000-01-01'
AND publishdate<='2015-12-31'
GROUP BY articles.idarticle
ORDER BY publishdate DESC
SELECT id
FROM Kategorie
WHERE sub IN (1, 7)
GROUP BY id
HAVING COUNT(*) > 1
Tohle udela podle mne to, ze to vybere vse, co ma 1 nebo 7, ale muze to mit treba jen 1. A pak to zgrupuje podle id. Takze vyslednekm budou dva radky, kde bude id 1 a 2. (jestli se nepletu)
Spis jsem to mozna spatne vysvetlil, neuvedl priklad.
SELECT id
FROM struktura
WHERE sub IN (1,7)
To vybere id = 1 a id =2.
Ja potrebuji, aby platilo sub = 1 a 7 soucasne. Cili by se to muselo napsat takovou silenosti jako
SELECT id
FROM struktura s0
LEFT JOIN struktura s1 ON s1.id=s0.id
LEFT JOIN struktura s2 ON s2.id=s0.id
WHERE
s1.id = 1 AND s2.id = 7
Cemuz bych se rad vyhnul a obesel to elegantne, podobne, jako s tim IN. Protoze pak ten dotaz musim generovat pres PHP cyklem na pocet sub idecek (autoru).
1 / (x^2 - a^2)
( 1 / (x - a) - 1 / (x + a) ) * 1 / (2 * a) = ... si to zkus dopocitat, vyjde ti 1 / (x^2 - a^2), ne? :)
x + a - (x - a) = x vypadnou, zustane +2a a toho se zbavis nasobenim 1/2a a to muzes provest za predpokladu, ze a je ruzne od nuly
Viz Kit
$sql = mysql_query("SELECT id FROM admin WHERE username='$manager' AND password='$password' LIMIT 1");
prepis to na
$query = "SELECT id FROM admin WHERE username='$manager' AND password='$password' LIMIT 1");
echo "<hr>$query<hr>"; // vypise sql dotaz, ktery muzes zkopirovat do phpmyadmina
$result = mysql_query($query) or die(mysql_error()); // vypise chybu
a pak taky to oprav tady na $result
$existCount = mysql_num_rows($sql); // zde
if ($existCount == 1) { while($row = mysql_fetch_array($sql)) // zde
A taky si to oprav bezpecnostni chyby a po odladeni smaz tu cast s "or die(...)", protoze to je taky bezpc. chyba, kdyz to hackerovi neco vypisuje.
Nevim, jestli ti to pomuze, ale ja potreboval nedavno celou funkci pro php pro rychly kosinus. Fakt je to celkem cool, ale musel jsem si to prizpusobit pro vetsi uhly. Jenze ty to nejspis mas spocitat.
Ten sinus, kosinus se prave pocita z toho, ze urcitem intervalu je ten polynom skoro stejny jako sin, kosinus.
Je to vlastne furrierova transformace za pouziti polynomu misto sinu a cosinu. To ti mozna nic nerika :) Ta spocita v tom, ze scitanim a odcitanim sinu a cosinu do nekonecna je mozne vytvorit jakoukoliv nevracejici se krivku v uzavrenem intervalu. Urcite znas pak vysledek, pouzivat to kazdy digitalni obrazek a film, jpeg, mpeg, mp3, ogg...
// http://lab.polygonal.de/?…
function fastCos($x)
{
$x += 4.71238898; // $x += M_PI + pp(M_PI/2);
while ($x > 3.14159265)
{
$x -= 6.28318531;
}
if ($x < 0)
{
$x = 1.27323954 * $x + 0.405284735 * $x * $x;
if ($x < 0)
return .225 * ($x *-$x - $x) + $x;
else
return .225 * ($x * $x - $x) + $x;
}
else
{
$x = 1.27323954 * $x - 0.405284735 * $x * $x;
if ($x < 0)
return .225 * ($x *-$x - $x) + $x;
else
return .225 * ($x * $x - $x) + $x;
}
}
function fastCos($x)
{
$x += 4.71238898; // $x += M_PI + pp(M_PI/2);
while ($x > 3.14159265)
{
$x -= 6.28318531;
}
$xx = ($x < 0) ? $x * $x : -$x * $x;
$x = 1.27323954 * $x + 0.405284735 * $xx;
$xx = ($x < 0) ? -$x * $x : $x * $x;
return .225 * ($xx - $x) + $x;
}
function fastCos($x)
{
$x += 4.71238898; // $x += M_PI + pp(M_PI/2);
while ($x > 3.14159265)
{
$x -= 6.28318531;
}
return ($x < 0) ? 1.27323954 * $x + 0.405284735 * $x * $x : 1.27323954 * $x - 0.405284735 * $x * $x;
}
Mam tabulku, treba struktura (kategorie)
id, sub
1,1
1,7
1,6
2,4
2,9
2,1
Potreboval bych vybrat vsechna id, ktera maji sub = 1 a 7, cili AND. Da se to napsat nejak jednoduse, kdyz mam seznam cisel nebo to musim rozepisovat
sub = 1 AND sub = 7.
Kdybych to chtel resit jako OR, tak bych to napsal
sub = 1 OR sub = 7 -- nebo
sub IN (1,7) -- a prave tohle bych potreboval pro AND, protoze poddotazem vybiram id na zaklade textoveho nazvu
V realnem kodu mam toto pro OR
$aut = ''.implode("* ",$searchtermsep).'*';
AND ArtAut.AutAid IN (SELECT ax.`IDAuthor` FROM `Authors` ax WHERE MATCH(ax.secondname) AGAINST('".$aut."' IN BOOLEAN MODE))