Autor Zpráva
chris
Profil
ahoj, prosim o radu...

vypisuju z MySQL databáze přes PHP záznamy z jedný tabulky - třeba jen název... toto je výpis celkový ze všech kategorií...
chci pod tímto výpisem ještě jeden výpis ze stejné tabulky, který ale bude vypisovat jen jednu kategorii, ale nechci, aby zobrazoval již zobrazené záznamy, které jsou vidět ve výpisu viz výše...

může mi s tím někdo pomoct?

$sql = "select * from zaznamy limit 0,10";
 $dotaz = mysql_query($sql);

 while ($zazn = mysql_fetch_assoc($dotaz)){ 
 echo '  '.$zazn["nazev"].'   '; // první výpis
 }
 
 $sql2 = "select * from zaznamy where rubrika='jentahlerubrika' limit 0,10";
 $dotaz2 = mysql_query($sql2);

 while ($zazn2 = mysql_fetch_assoc($dotaz2)){ 
 echo '  '.$zazn2["nazev"].'  ';  // druhý výpis, kde nebudou záznamy zobrazené v prvním výpise
 }
okolojdouci
Profil *
První řádek oprav na:
$sql2 = "select * from zaznamy where rubrika<>'jentahlerubrika' ";
okolojdouci
Profil *
Vlastně pardon, nejde o opravu prvního řádku, ale o přidání dalšího komplet kódu pro výpis.
chris
Profil
okolojdouci:
Vlastně pardon, nejde o opravu prvního řádku, ale o přidání dalšího komplet kódu pro výpis.


upravil jsem řádek 8 a druhý výpis mi nyní zobrazuje záznamy, které NEPATŘÍ do rubriky "jentahlerubrika"...
chtěl jsem, aby výpis zobrazoval záznamy z této rubriky, ale vynechal záznamy, které už zobrazil první výpis, který obsahuje záznamy i z ostatních rubrik...
okolojdouci
Profil *
chris:
Abych si to ujasnil:
1. Nejdřív vypíšeš záznamy ze všech rubrik.
2. Pak vypíšeš záznamy z jedné konkrétní rubriky.
3. Pak chceš záznamy, které jsou v prvním a nejsou ve druhém výpisu?
chris
Profil
okolojdouci:
1. ano
2. ano
3. ve výpisu č.2 chci záznamy z jedné konkrétní rubriky, ale s vynecháním záznamů, které vypsal výpis č.1
okolojdouci
Profil *
chris:
3. ve výpisu č.2 chci záznamy z jedné konkrétní rubriky, ale s vynecháním záznamů, které vypsal výpis č.1

Jinými slovy: vzhledem k tomu, že výpis č. 1 zahrnuje všechny záznamy, chceš ve výpisu 2 vypsat nula záznamů. To nebude složité.
chris
Profil
okolojdouci:
aha, máš pravdu - zapomněl jsem napsat, že první výpis vypíše třeba jen prvních 10 záznamů ze 100, takže je tam ještě
 limit 0,10

to je tím, jak jsem ten kód chtěl co nejvíce zjednodušit pro fórum...
okolojdouci
Profil *
zkusil bych
SELECT * FROM zaznamy WHERE rubrika='jentahlerubrika' AND ID NOT IN (SELECT ID FROM zaznamy LIMIT 0,10)


předpokládám, že
- tam máš sloupec ID
- si doplníš nějaký ORDER BY
chris
Profil
kód jsem upravil i v prvním příspěvku, tak prosím znovu o radu
chris
Profil
okolojdouci:
píše mi to Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

můžu vůbec takhle SELECTovat dvakrát z jedný tabulky v jednom dotazu?
okolojdouci
Profil *
Dostal jsem hlášku This version of MySQL doesn't yet support 'LIMIT &amp; IN/ALL/ANY/SOME subquery'
Problém je asi v tom LIMITu v poddotazu.

Tak si z těch prvních deseti ID (získaných prvním dotazem) udělej řetězec a vlož do toho dotazu takhle:
... AND ID NOT IN (1,2,6,12) // prvních deset ID


Je to trochu neelegantní, ale funkční a bezproblémové.

Jestli jsem něco přehlídl, předpokládám, že mě někdo během několika málo hodin opraví.
chris
Profil
okolojdouci:
Tak si z těch prvních deseti ID (získaných prvním dotazem) udělej řetězec
nevím jak :) můžeš mi to prosím napsat? díky moc za tvůj čas!
chris
Profil
okolojdouci:
AND ID NOT IN (1,2,6,12)
tohle funguje přesně jak chci, jen nevím jak udělat ten řetězec...
okolojdouci
Profil *
$top10 = "0";
$sql = "select * from zaznamy limit 0,10";
 $dotaz = mysql_query($sql);

 while ($zazn = mysql_fetch_assoc($dotaz)){ 
 echo '  '.$zazn["nazev"].'   '; // první výpis
 $top10 .= ",".$zazn["ID"];
 }
..
..
 $sql2 = "SELECT * FROM zaznamy WHERE rubrika='jentahlerubrika' AND ID NOT IN (".$top10.")";

(Kajmanovi se to bastlení asi líbit nebude)
chris
Profil
okolojdouci:
díky, ale zatím mi to píše zase mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
zkouším to porůznu upravit...

přenese se to $top10 do druhého SELECTU, i když je definice $top10 obsažena v dříve ukončeném (tom prvním) while?
okolojdouci
Profil *
chris:
Vypiš si ten $sql2 a ukaž ho tady.
chris
Profil
okolojdouci:
když je tam AND ID NOT IN (".$top10.") tak to nevypíše nic a hodí to chybu... bez téhle podmínky to vypisuje samozřejmě to samé jako výpis č.1

tu chybu to háže na řádek 11 z původního kódu
okolojdouci
Profil *
Myslel jsem obsah toho $sql2.
echo $sql2;
chris
Profil
okolojdouci:
aha

SELECT * FROM zaznamy WHERE rubrika='jentahlerubrika' AND ID NOT IN (,1)
okolojdouci
Profil *
chris:
... a do očí tě to neprásklo?

V $top10 musí být ta nula, co je na řádku 1 (ta je tam jen kvůli čárce). Pak se tam musí v tom prvním while přilepit těch deset čísel oddělaných čárkou. Výsledek ",1" tomu zjevně neodpovídá. Něco děláš špatně.
chris
Profil
okolojdouci:
samozřejmě prásklo...

když si dám vypsat
echo $top10; 

píše to vždy v prvním výpise čárka id (např. ,2)

když to změním na
 $top10 = "".$zazn["id"];

tak už to píše id bez čárky, ale ve druhém výpise je stále jen:
and id NOT IN (1) 

jako kdyby to zohledňovalo jen id 1...
okolojdouci
Profil *
chris:
Můj příspěvek #15, ř. 7, ještě jednou a pomalu:
 $top10 .= ",".$zazn["ID"];
chris
Profil
okolojdouci:
promiň, ale nechápu
takto jsem ten řádek měl, ale vypisoval při echu: čárka,č.id

nevím, zda se mi snažíš něco naznačit či zda už řešení znáš... už nad tím sedím asi moc dlouho...
chris
Profil
tak už to mám přes implode...

$top10[]=$zazn["id"]; 

.
.
and id NOT IN (".implode(",", $top10).")


díky moc za tvůj čas, pomohl jsi mi navést na správné řešení
měj se!
okolojdouci
Profil *
Snažil jsem se naznačit, že v tom mém řádku bylo .=, kterým se každé další ID k tomu $top10 přidávalo, tys tam měl =, kterým sis to v každém průchodu přepsal.
chris
Profil
okolojdouci:
původně jsem tam tu tečku měl, ale házelo to chybu
každopádně ještě jednou 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