Autor | Zpráva | ||
---|---|---|---|
mroczis Profil |
#1 · Zasláno: 15. 2. 2012, 19:49:49
Čaute,
mám pole se 49 prvky. Problém je ten, že některé prvky jsou naprosto stejné, a proto se jich chci kompletně zbavit. Zkoušel jsem funkci array_unique(); ale vyplivlo mi to zpátky naprosto identické pole. Pro představu, co tam je uvádím i příklady hodnot uložených v poli : Adon olam / Tomáš Novotný Ave verum corpus / Charles Camille Saint-Saens If ye love me / Thomas Tallis My Singing Bird / irská/Tereza Surovíková Poděbradská brána / Zdeněk Lukáš Dávno / Antonín Tučapský Dávno / Antonín Tučapský If ye love me / Thomas Tallis Con el vito / Manuel Mussotti Littel Verleih uns frieden / Heinrich Schutz The Lord, Bless You And Keep You / John Rutter Ave verum corpus / Charles Camille Saint-Saens Bogorodice děvo - Part / neuveden Dávno / Antonín Tučapský If ye love me / Thomas Tallis Jediná věc, co mě napadla je : ... $pocet_dotazu=count($pole1); $l=1; for ($k=1;$k<$pocet_dotazu;) { if($vysledek[$k]==$vysledek[$l]) {$vysledek[$k]=0;} $l++; if ($pocet_dotazu=$l) {$k++; $l=1;} } Otázky : Je moje verze vyřazování úplně blbě ? Jak je to správně ? |
||
Tori Profil |
#2 · Zasláno: 15. 2. 2012, 20:02:27
mroczis:
Jak přesně to pole vypadá? Když jsem si z toho udělala obyč.číslované pole: array(49) { [0]=> string(28) "Adon olam / Tomáš Novotný" [1]=> string(46) "Ave verum corpus / Charles Camille Saint-Saens" [2]=> string(29) "If ye love me / Thomas Tallis" ... Píseň Bogorodice děvo je - soudím podle části názvu - zřejmě ta od Arvo Pärta. |
||
mroczis Profil |
pole mám definovaná takto :
$b=mysql_query('SELECT DISTINCT * FROM zpivalo_se WHERE id_zk>='.$pocet2.' AND id_zk<='.$pocet); $i=1; $pole1=array(); $pole2=array(); while ($b2=mysql_fetch_assoc($b)) { $c=mysql_query('SELECT * FROM skladby WHERE id='.$b2["id_skladby"].''); $c2=mysql_fetch_assoc($c); $d=mysql_query('SELECT * FROM skladby_autor WHERE id='.$c2['autor'].''); $d2=mysql_fetch_assoc($d); $nazev=$c2['nazev']; $jmeno=$d2['name'].' '.$d2['surname']; $pole1[$i]=$nazev; $pole2[$i]=$jmeno; $i++; } |
||
Tori Profil |
#4 · Zasláno: 15. 2. 2012, 20:26:28
mroczis:
Pokud je cílem seznam skladeb a jejich autorů, tak to půjde jedním dotazem a jedním cyklem. Potřebujete na něco ty samostatná pole názvů resp. autorů, nebo to je ještě z té nefunkční verze array_unique? mysql_query('SELECT DISTINCT s.`nazev`, CONCAT_WS(' ', a.`name`, a.`surname`) 'autor' FROM `zpivalo_se` z LEFT JOIN `skladby` s ON s.`id` = z.`id_skladby` LEFT JOIN `skladby_autor` a ON a.`id` = s.`autor` WHERE z.`id_zk` BETWEEN '.$pocet2.' AND '.$pocet.' ORDER BY `autor`, `nazev`); |
||
mroczis Profil |
Tori:
Potřebuji jen jména autorů a danou skladbu pro výpis, nic jiného s tím dělat nechci. Předělávám starý systém po někom jiném, kterýto dělal před 10 lety, takže se některým věcem sám divím. Každopádně celý kód pro vytáhnutí téhle primitivní informace je : $a=mysql_query('SELECT * FROM zpivalo_se ORDER BY id_zk DESC LIMIT 1'); $a2=mysql_fetch_assoc($a); $pocet=$a2['id_zk']; $pocet2=$pocet-10; // Mame range pro vytahnuti doatzu $b=mysql_query('SELECT DISTINCT * FROM zpivalo_se WHERE id_zk>='.$pocet2.' AND id_zk<='.$pocet); $i=1; $pole1=array(); $pole2=array(); while ($b2=mysql_fetch_assoc($b)) { $c=mysql_query('SELECT * FROM skladby WHERE id='.$b2["id_skladby"].''); $c2=mysql_fetch_assoc($c); $d=mysql_query('SELECT * FROM skladby_autor WHERE id='.$c2['autor'].''); $d2=mysql_fetch_assoc($d); $nazev=$c2['nazev']; $jmeno=$d2['name'].' '.$d2['surname']; $pole1[$i]=$nazev; $pole2[$i]=$jmeno; $i++; } $pocet_dotazu=count($pole1); for ($j=1;$j<$pocet_dotazu;$j++) {$vysledek[$j]=$pole1[$j].' / ' .$pole2[$j];} $l=1; for ($k=1;$k<$pocet_dotazu;) { if($vysledek[$k]==$vysledek[$l]) {$vysledek[$k]=$vysledek[$l];} $l++; if ($pocet_dotazu=$l) {$k++; $l=1;} } |
||
Tori Profil |
Zkuste tohle. Možná by tam ten první dotaz šel taky napasovat jako poddotaz do WHERE, ale nechci to komplikovat.
$result = mysql_query('SELECT MAX(`id_zk`) FROM `zpivalo_se`'); $do = mysql_result($result, 0); $od = $do - 10; $result = mysql_query("SELECT DISTINCT s.`nazev`, CONCAT_WS(' ', a.`name`, a.`surname`) 'autor' FROM `zpivalo_se` z LEFT JOIN `skladby` s ON s.`id` = z.`id_skladby` LEFT JOIN `skladby_autor` a ON a.`id` = s.`autor` WHERE z.`id_zk` BETWEEN ".$od." AND ".$do." ORDER BY `autor`, `nazev`"); $vysledek = array(); while ($radek = mysql_fetch_array($result)) { $vysledek[] = $radek['nazev'] . ' / ' . $radek['autor']; } |
||
mroczis Profil |
Odpověď serveru :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in XXX on line 48 (text - line 5) Nemáš ty úvozovky u slova autor nějak divně ? Pokud to změním 'autor' --> `autor` tak to už projde, ale potom to vyplivne Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in XXX on line 52 (text - line 9) |
||
Tori Profil |
#8 · Zasláno: 15. 2. 2012, 21:26:58
mroczis:
Pardon, dala jsem omylem apostrofy místo uvozovek. Opravila jsem v [#6]. |
||
mroczis Profil |
Tori:
Takhle to nevyplivne bohužel nic. |
||
Tori Profil |
mroczis:
V kterém dotazu je chyba - najde se prvním dotazem správně ten rozsah čísel v id_zk? A když z druhého dotazu vyhodíte část WHERE tak taky nic? Nebo když místo proměnných dopíšete ručně nějaký (jakýkoli existující) rozsah id_zk? |
||
mroczis Profil |
#11 · Zasláno: 16. 2. 2012, 17:31:17
Tori :
Omluvám se, byla to má chyba, protože jsem si nevšil, že v kódu není příkaz pro výpis hodnot, takže jsem měl za to, že to nic nevyplivne. Ve skutečnosti to funguje přesně tak, jak by to fungovat mělo. Mockrát díky ! |
||
Časová prodleva: 13 let
|
0