Autor Zpráva
kounak22
Profil
Mám takový problém mám jeden soubor v kterém zadávám parametry pro výběr a řazení výsledků v databázi. pak druhý soubor v kterém mám již dané podmínky a výběr z databáze a konečně třetí soubor kde hodnotím jestli uživatel odpověděl na dané otázky načtené z databáze správně a znovu ho přesměrovávám na předchozí soubor. Mezi všemi soubory si předávám potřebné parametry. ukázka druhého souboru vypadá asi takto :

// načtení jednotlivých hodnot z kolonky řazení

switch ($_POST['razeni']) {
case 'datum': $razeni_databaze='id'; break;
case 'nahodne': $razeni_databaze='RAND()'; break;
}

// načtení jednotlivých hodnot z kolonky jak_řadit
switch ($_POST['jak_radit']) {
case 'od_zacatku': $typ_razeni='ASC'; break;
case 'od_konce': $typ_razeni='DESC'; break;
}

//vytvoření proměných
$kategorie_zaznamu=$_POST['kategorie'];
$podkategorie_zaznamu=$_POST['podkategorie'];

// vytvoření proměných pod jistýmy podmínkamy jestliže je řazení náhodné a vyplněny kategorie i podkategorie

if($_POST['razeni']=='nahodne' AND $_POST['kategorie']!='1' AND $_POST['podkategorie']!='1'){

$kategorie_databaze='WHERE anatomie_moznosti.kategorie';
$podkategorie_databaze='AND anatomie_moznosti.podkategorie';

}	
	
// vytvoření proměných pod jistýmy podmínkamy jestliže je řazení náhodné a vyplněny kategorie a podkategorie je prázdná

if($_POST['razeni']=='nahodne' AND $_POST['kategorie']!='1' AND $_POST['podkategorie']=='1'){
$kategorie_databaze='WHERE anatomie_moznosti.kategorie';
$podkategorie_databaze='';
}	

// vytvoření proměných pod jistýmy podmínkamy jestliže je řazení náhodné a kategorie není vyplněna a podkategorie je vyplněna

if($_POST['razeni']=='nahodne' AND $_POST['kategorie']=='1' AND $_POST['podkategorie']!='1'){
$podkategorie_databaze='WHERE anatomie_moznosti.podkategorie';
$kategorie_databaze='';
}	

// vytvoření proměných pod jistýmy podmínkamy jestliže je řazení náhodné a kategorie není vyplněna a podkategorie také ne

if($_POST['razeni']=='nahodne' AND $_POST['kategorie']=='1' AND $_POST['podkategorie']=='1'){
$kategorie_databaze='';
$podkategorie_databaze='';
}	

// vytvoření proměných když řazení bude od začátku ASC a bude vyplněná jak kategorie tak podkategorie

if($_POST['razeni']=='datum' AND $_POST['jak_radit']=='od_zacatku' AND $_POST['kategorie']!='1' AND $_POST['podkategorie']!='1' AND $_POST['id_zaznamu']==0){

$kategorie_databaze='WHERE anatomie_moznosti.kategorie';
$podkategorie_databaze='AND anatomie_moznosti.podkategorie';

}	

// načtení databáze jestliže se rovná řazení náhodné a je zadána ketegorie i podkategorie

$vysledek=mysql_query("SELECT anatomie_moznosti.id, anatomie_moznosti.kategorie, anatomie_moznosti.podkategorie, anatomie_moznosti.otazka, anatomie_moznosti.poznamky, anatomie_moznosti.otazku_zapsal_datum AS datum_zapsani, anatomie_moznosti.otazku_zapsal_id AS kdo_zapsal, anatomie_moznosti.otazku_zmenil_datum AS datum_zmeny, anatomie_moznosti.otazku_zmenil_id AS kdo_zmenil, anatomie_moznosti.moznost_a, anatomie_moznosti.moznost_b, anatomie_moznosti.moznost_c, anatomie_moznosti.moznost_d, anatomie_moznosti.odpoved_a, anatomie_moznosti.odpoved_b, anatomie_moznosti.odpoved_c, anatomie_moznosti.odpoved_d, anatomie_kategorie.id AS kategorie_id, anatomie_kategorie.kategorie AS kategorie_kategorie, anatomie_podkategorie.id AS podkategorie_id, anatomie_podkategorie.podkategorie AS podkategorie_podkategorie
								FROM `anatomie_kategorie` RIGHT JOIN `anatomie_moznosti` 
								ON anatomie_kategorie.id = anatomie_moznosti.kategorie
								LEFT JOIN `anatomie_podkategorie`
								ON anatomie_podkategorie.id = anatomie_moznosti.podkategorie
								$kategorie_databaze=$kategorie_zaznamu
								$podkategorie_databaze=$podkategorie_zaznamu
								ORDER BY $razeni_databaze $typ_razeni LIMIT 1");

print 'Num:' . mysql_errno() . ' Message: ' . mysql_error() . '<br>';



při náhodném řazení vše funguje jak má, avšak při řazení postupném to nejde z několika důvodů a to :
1) když nebudu mít podmínky kategorie a podkategorie vyplněny mohl bych udělaz že $id_zaznamu=$id_zaznamu++; když budu mít řazení od začátku a opačne kdybych měl řazení od konce avšak problém je když v databázi je třeba id 1,2,3,5 (chybí čtyřka) tak se výpis zastaví u čísla 3 a pak se nevypíše nic.
2) když budu mít vyplněny podmínky kategorie nebo podkategorie tak se nedá udělat $id_zaznamu=$id_zaznamu++ jelikož ty id budou sice posobě ale nějak takto id 5, 12, 334 atd....


Otázka zní jak udělat aby při postupném řazení (podle id) se mi vždy načetla další hodnoty z databáze která ještě nebyla zobrazena předtím a je následujícím záznamem ?

Omlouvám se možná je to triviální ale já si s tím nevím rady děkuji za pomoc:-)

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
SwimX
Profil
kounak22:
moc to nechápu. Máš formulář, kde si uživatel vybere jak to chce seřadit a jemu se vypíšou hodnoty z DB.

když nevybere kategorii, tak se mu to vypíše ze všech kategorií ne? čili se podmínka s kategorií neobjeví vubec ve WHERu.
kounak22
Profil
SwimX:
no přesně tak podmínka where se neobjeví ale i když nebude podmínka where tak id v DB nemusí být vždy o jednu větší ale třeba o dvě nebo o pět jelikož nějaký záznam mohl být vymazán!!!! a když tam bude podmínka where tak id budou různá a ne vždy o jednu větší nebo o jednu menší
SwimX
Profil
kounak22:
tak id v DB nemusí být vždy o jednu větší
no a? vždyť to ničemu nevadí ne?
kounak22
Profil
SwimX:
no a jak vypíšu další záznam koukej struktura je takhle soubor 1 v tom se zadají parametry toho jak řadit podle čeho a kategorie a podkategorie . V souboru 2 se načtou tyto parametry a vypíše se podle toho jeden záznam kde na tento záznam (otázku) uživatel odpoví nebo zaškrtne možnosti a přejde se na soubor 3 který daný vstup od uživatele zhodnotí jestli je správně nebo ne a pak je tam tlačítko další otázka kde ho to přesměruje znovu na soubor 2 a ten skript musí nějak poznat že už tu otázku s id např 1 vypisoval a má vypisovat otázku s následujícím vyšším id chápeš?
SwimX
Profil
kounak22:
konečně chápu :)

tak co kdyby se v souboru 3 naplňovala sessiona idéčkama otázek na které bylo zodpovězeno. Třeba
$_SESSION['pouzita'][] = $id; //nevím kde máš id otázky na kterou zrovna odpovídá

a ten dotaz by tedy vypadal


"SELECT ..... WHERE id NOT IN (".implode(',', $_SESSION['pouzita']).") .... ORDER BY .... LIMIT 1" 

šlo by to?
kounak22
Profil
no to by teoreticky mohlo jít jen jak se večer dostanu ke skriptům tak to zkusím takhle nějak napsat a večer napíšu jestli to jde nebo ne zatím moc děkuji za radu :-)
kounak22
Profil
no to by teoreticky mohlo jít jen jak se večer dostanu ke skriptům tak to zkusím takhle nějak napsat a večer napíšu jestli to jde nebo ne zatím moc děkuji za radu :-)
kounak22
Profil
SwimX:
Tak to jde děkuji moc za radu
Toto téma je uzamčeno. Odpověď nelze zaslat.