Autor | Zpráva | ||
---|---|---|---|
hellmc Profil |
Ahoyte .... potrebujem zobrazovat duplikaty na stranke kniznice, moj kod vyzera >
function fetch_to_array_duplikaty() { global $od,$po; $q=exeq("SELECT DISTINCT(nazov) AS proto, COUNT(nazov) AS pocet FROM fond WHERE vyradena=0 GROUP BY nazov HAVING pocet > 1 "); $n=mysqli_num_rows($q); #$f=exeq("SELECT DISTINCT(nazov) AS proto, COUNT(nazov) AS pocet FROM fond WHERE vyradena=0 GROUP BY nazov HAVING pocet > 1 LIMIT $od,$po"); $f=exeq("SELECT nazov AS proto FROM fond WHERE vyradena=0 GROUP BY nazov HAVING COUNT(*) >1 LIMIT ".$od.",".$po); while($x=mysqli_fetch_assoc($f)) { $duplikaty[]=$x['proto']; } for($i=0;$i<count($duplikaty);$i++) { $q=exeq("SELECT * FROM fond WHERE nazov='".$duplikaty[$i]."'"); while($f=mysqli_fetch_assoc($q)) { $ret[]=$f; } } return array("return"=>$ret,"vsetkych"=>$n); } exeq je mysqli_query, problem ze sa mi zobrazuju aj vyradene dokumenty (vyradena=0) a ich je viac ako dva rovnake (s rovnakym nazvom) ... Dik za hocijaku pomoc ... Moderátor juriad: Občas je potřeba použíť [>prephp] namísto [>pre] pro obarvení zdrojového kódu
|
||
juriad Profil |
#2 · Zasláno: 2. 2. 2022, 16:15:11
Namísto cyklu a druhého dotazu polož chytřejší dotaz:
SELECT f.* FROM fond f JOIN ( SELECT nazov AS proto FROM fond WHERE vyradena=0 GROUP BY nazov HAVING COUNT(*) >1 LIMIT $od, $po ) dup ON f.nazov = dup.proto ORDER BY f.nazov Toto ti vrátí všechny knihy, které mají duplicitní název. Ten order by na konci zajistí, že knihy se stejným názvem budou vedle sebe. Alternativně by ti stačilo přidat podmínku do selectu na 22. řádce (na konec): SELECT * FROM fond WHERE nazov='...' AND vyradena=0 Mimochodem, je docela špatné vkládat hodnoty do selectů tímto způsobem. Způsobí ti to chybu jakmile budeš mít knihu, jejíž název obsahuje apostrof ' . A je to i bezpečnostní díra.
Správně bys měl název escapovat, ale to zavání použitím další globální proměnné. "SELECT * FROM fond WHERE nazov='" . mysqli_real_escape_string($connection, $duplikaty[$i]) . "'" |
||
hellmc Profil |
#3 · Zasláno: 2. 2. 2022, 17:42:17
juriad:
Dik moc ... tvoje riesenie je super ... mam to> $f=exeq("SELECT f.* FROM fond f JOIN ( SELECT nazov AS proto FROM fond WHERE vyradena=0 GROUP BY nazov HAVING COUNT(*) >1 LIMIT $od, $po ) dup ON f.nazov = dup.proto ORDER BY f.nazov"); while($x=mysqli_fetch_assoc($f)) { $ret[]=$x; } |
||
Časová prodleva: 2 roky
|
0