Autor Zpráva
mroczis
Profil
Č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
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" ... 
, tak mi array_unique fungovalo správně.
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
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'];
}
Pokud se nemůže stát, že by zpivalo_se.id_skladby nebo skladby.autor odkazovalo na neexistující ID, tak změňte LEFT JOIN na INNER JOIN, možná se ten dotaz trochu zrychlí. (edit: oprava blbě pojmenovaných proměnných)
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
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
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 !

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:

0