Autor Zpráva
Michales
Profil
Ahoj,

mám problém s tímto scriptem:
$q =strtolower( $_GET["q"]);
if (!$q) return;

$sql = "(SELECT Album as vyhledani,id as cislo from albums WHERE Album LIKE '$q%') UNION (SELECT name as vyhledani,id as cislo from interprets WHERE name LIKE '$q%') UNION (SELECT Title as vyhledani,id as cislo from songs WHERE Title LIKE '$q%')";
$rsd = mysql_query($sql);
while($rs = mysql_fetch_array($rsd)) {
    $cid = $rs['cislo'];
    $cname = $rs['vyhledani'];
    echo "$cname|$cid\n";
}

Vrátí mi 10 výsledků, při proměnné $q= Johnny Cash, což je špatně.
Pokud sql dotaz použiju v myadminu tak vrátí správný počet a to 22
Camo
Profil
Michales:
V myAdmine to zadávaš ako sql alebo je na union funkcia? V dokumentácii sa píše "duplicate rows are removed from the result."
Michales
Profil
Camo:
Jako sql dotaz: (SELECT Album as vyhledani,id as cislo from albums WHERE Album LIKE 'johnny cash%') UNION (SELECT name as vyhledani,id as cislo from interprets WHERE name LIKE 'johnny cash%') UNION (SELECT Title as vyhledani,id as cislo from songs WHERE Title LIKE 'johnny cash%')
A v myadminu se to zobrazí správně.
Camo
Profil
Michales:
Podľa mňa to súvisí s tým odstraňovaním duplicitných riadkov. V documentácii je napísané ako sa to vypína tak to skús.
Michales
Profil
Camo:
V databázi nemám duplicity, pokud to tedy nebere toto: Album as vyhledani,id as cislo, name as vyhledani,id as cislo, Title as vyhledani,id as cislo jako duplicity
Camo
Profil
Michales:
Vyskúšal si to? Ja tvoju databázu nevidím.
Michales
Profil
Pokud slo o to dat UNION ALL tak ano. Ovsem vysledek je stejny. V myadminu spravne ve scriptu nikoliv.
Camo
Profil
Michales:
Obydva tie UNIONy majú pri sebe ALL?
Michales
Profil
$sql = "(SELECT Album as vyhledani,id as cislo from albums WHERE Album LIKE '$q%') UNION ALL (SELECT name as vyhledani,id as cislo from interprets WHERE name LIKE '$q%') UNION ALL (SELECT Title as vyhledani,id as cislo from songs WHERE Title LIKE '$q%')";
Alphard
Profil
První krok by měla být analýze toho, který výsledek je správný. Předpokládejme, že tady něco chybí. Chybí data z nějaké konkrétní tabulky, nebo ze všech nějaká? Jaká data chybí, jsou něčím zvláštní?
Možná sem dejte těch 22 správný řákdů, třeba někho něco napadne.
Michales
Profil
Zde je možno vyzkoušet: http://kantry.funsite.cz/vyhledavac/test2.php Při zadání Johnny Cash = 10 výsledků
Běží tam tento script:
require_once "config.php";
$q =strtolower( $_GET["q"]);
if (!$q) return;

$sql = "(SELECT Album as vyhledani,id as cislo from albums WHERE Album LIKE '$q%') UNION ALL (SELECT name as vyhledani,id as cislo from interprets WHERE name LIKE '$q%') UNION ALL (SELECT Title as vyhledani,id as cislo from songs WHERE Title LIKE '$q%')";
$rsd = mysql_query($sql);
while($rs = mysql_fetch_array($rsd)) {
    $cid = $rs['cislo'];
    $cname = $rs['vyhledani'];
    echo "$cname|$cid\n";
}
Při zadání tohoto sql dotazu v myadminu: (SELECT Album as vyhledani,id as cislo from albums WHERE Album LIKE 'johnny cash%') UNION ALL (SELECT name as vyhledani,id as cislo from interprets WHERE name LIKE 'johnny cash%') UNION ALL (SELECT Title as vyhledani,id as cislo from songs WHERE Title LIKE 'johnny cash%')
22 výsledků, viz. screen



Samozřejmě že to co je v myadminu je správně.
Camo
Profil
Michales:
Však v tom script máš DISTICT miesto ALL.
Michales
Profil
Camo:
Ano zde jsem dal omylem DISTINCT ale normálně na http://kantry.funsite.cz/vyhledavac/test2.php mám ALL
Už je výše script upraven do správné podoby.


Už jsem na to přišel, chyba byla v nastavení v max: options && !options.scroll ? 10 : 150 javascriptu
Camo
Profil
Michales:
A ešte jednu vec som chcel. funkcie mysql_ sú deprecated.
Michales
Profil
Camo:
VÍM
Keeehi
Profil
A ještě SQL Injection.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0