Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
#1 · Zasláno: 7. 11. 2010, 20:05:43
Prosím nekamenujte mě, za mou hloupost a za to že máte pocit, že se rovnou ptám a nestuduji. Databázi jsem věnoval už min. 20 hod.
Min. 5 vstupních polí a každé může být vylněno, ale nemusí. Jak zpracovat to velké množství možností? (velké množství podmínek?) SELECT vrátí tabulku. správně? Následný SELECT zpracovává vrácenou tabulku, nebo původní v databázi? Lze něco takového, jako WHERE sloupec=*? příkl. if(isset $_POST['neco']) { $data=$_POST['neco']} else {$data='*'} SELEC * from tabulka WHERE sloupec=$data A nebo lze kombinovat sql dotaz s php? SELECT * from tabulka if(...) {echo WHERE...}; |
||
Jcas Profil * |
#2 · Zasláno: 7. 11. 2010, 21:31:26
Lze si nějak napřed poskládat sql dotaz ateprve až je poskládaný, tak ho teprve položit (provést)?
|
||
panther Profil |
#3 · Zasláno: 7. 11. 2010, 21:36:44 · Upravil/a: panther
Jcas:
„Lze si nějak napřed poskládat sql dotaz ateprve až je poskládaný, tak ho teprve položit (provést)?“ ano. To sis ostatně mohl zkusit, že? |
||
Jcas Profil * |
#4 · Zasláno: 8. 11. 2010, 10:30:35
To sis ostatně mohl zkusit, že? Nemohl zatím nemám na čem. Zatím se jen snažím vymeslet, jaká bude struktura. Chcu se vyvarovat předchozím svým zkušenostem, kdy jsem tvořil stylem"ještě potřebuji tohle - plác to tam, aha tady ještě jedna neošetrená možnost-plác to tam, a tohle přeplácnem a tamto zaplácnem.
Chcu si napřed promyslet strukturu a pak to napsat. Mám jedno řešení, jak zpracovat více vstupních polí. 1. Pokud nebude form odeslán (input hidden name="odeslan") - rovnou zobrazím celou tabulku 2.form byl odeslán, takže uděláme tu (pro mě složitou) selekci. Všech 7 vstupních polí projdu a pokud bude vyplněno, jeho hodnotu vložím do $prikl1-$prikl7 Načtu opět celou tabulku $vylsedek=SELECT * from tabulka Budu číst tabulku po řádcích, tvořit pole a volat funkci kontrola() mysql_fetch_array($vysledek) {kontrola(slopec['1'], sloupec['2']...)} A další selekci provedu a na takovém poli Řádek se zobrazí pokud: if((!isset($prikl1)||$prikl1==sloupec['1']) || (!isset($prikl2)||$prikl2==sloupec['2']) ||........) {zobraz(slopec['1'], sloupec['2']...))} Není to sice to co jsem chtěl, ale takhle by to snad šlo. Takhle tahám z databáze celou tabulku a já původně chtěl tahat už vyselektovaná data. Ale nikde nemůžu najít nějakou vzorovou strukturu. Problém je že mám moc dotazů. Select * ... ...where input1 vyplnen ...where input1 vyplnen ale nerovná se ...where input1 vyplnen a input2 vyplnen ...atd ...atd |
||
xmark Profil |
#5 · Zasláno: 8. 11. 2010, 10:37:17
Jcas:
Nemyslíš, že si to zbytečně komplikuješ? SELECT neco1, neco2, neco3 from tabulka where x=1 and y=2 and z=3 je prostě string. If používat umíš, tak ho prostě po odeslání formuláře desetkrát použij a seskládej si dotaz na míru. |
||
Jcas Profil * |
#6 · Zasláno: 8. 11. 2010, 10:55:55
Takhle nějak jsem si to představoval, ale asi řeším kravinu, ovšem a musím se vráti k dotazu č.1
Problém mám např. když pole 3 nebude vyplněno a dotaz bude where sloupec3=všechno Může se udělat $text2='where sloupec2=$hodnota2' $text3="" where sloupec1=$hodnota1'.$text2.' and '.$text3.' and '.text4.' |
||
xmark Profil |
#7 · Zasláno: 8. 11. 2010, 11:21:02
Proč chceš skládat SQL dotaz, který bude vytahovat řádky, kde sloupec1 rovná se jedna a zároveň i druhá a třetí hodnota?
|
||
xmark Profil |
#8 · Zasláno: 8. 11. 2010, 11:28:02
A k tomu #1 :
Pokud jde o to else {$data='*'}, tak to sice do dotazu nějak začlenit můžeš, ale je to zbytečný. Opravdu nemá smysl vytvářet podmínku, která je vždy splněna. |
||
Jcas Profil * |
#9 · Zasláno: 8. 11. 2010, 11:54:09
Odkaz
Tuhle str. potřebuji předělat a uživatel by měl mít možnost si nechat zobrazit výstavy dle data, kraje, pořadatele, typu výstavy. Takže mám vlastně jenom 5 vstupů, ale každý může být a nemusí být vyplněn. Mohu chtít zobrazit pouze dle kraje, ale také mohu chtít zobrazit dle kraje && datumu $$ typu. |
||
xmark Profil |
#10 · Zasláno: 8. 11. 2010, 13:52:56 · Upravil/a: xmark
Když nebude vyplněn, tak ho do selectu nezahrneš.
$sql= "SELECT * FROM tbl WHERE ID>0"; if (!empty($_POST["barva"])) {$sql.=" AND barva='".$_POST["barva"]."'";}; if (!empty($_POST["velikost"])) {$sql.=" AND velikost='".$_POST["velikost"]."'";}; if (!empty($_POST["pocet"])) {$sql.=" AND pocet='".$_POST["pocet"]."'";}; if (!empty($_POST["druh"])) {$sql.=" AND druh='".$_POST["druh"]."'";}; Proč je tam to ID, to máš za domácí úkol. (obešlo by se to i bez toho, ale spěchám) |
||
Jcas Profil * |
#11 · Zasláno: 8. 11. 2010, 16:49:12
Tak tohle je přesně to co jsem hledal a co jsem nevěděl jak udělat.
Jestli tomu teda dobře rozumím, tak první přiřazení $sql zajistí vybrání všech řádků. Myslím, že to id tam je kvůly prázdné tabulce. A následně ta tečka před = zajistí přidání podmínky. Takže připojení k předchozímu sql dotazu. Asi špatně studuji. Tečku jako zřetězení jsem nalezl mockrát, ale .= vlastně ani neznám, takže si domýšlím, jak asi funguje zřetězení+přiřazení. |
||
Keeehi Profil |
#12 · Zasláno: 8. 11. 2010, 19:07:55 · Upravil/a: Keeehi
Jcas:
To ID>0 je tam proto, aby se nemusel zabývat s tím, jestli tam má AND být nebo ne. Klidně by tam mohlo být 1=1. Jinak,, kdyby tam tato vždy pravdivá podmínka nebyla, musel by jsi nejdříve kontrolovat, zda to co do řetězce přidáváš je první podmínka (potom nepřidávat AND) a nebo jedna z dalších podmínek (pak přidat AND). $prvni=true; $sql= "SELECT * FROM tbl"; if (!empty($_POST["barva"])) {$sql.=($prvni?" WHERE":" AND")." barva='$_POST[barva]'";$prvni=false;} if (!empty($_POST["velikost"])) {$sql.=($prvni?" WHERE":" AND")." velikost='$_POST[velikost]'";$prvni=false;} if (!empty($_POST["pocet"])) {$sql.=($prvni?" WHERE":" AND")." pocet='$_POST[pocet]'";$prvni=false;} if (!empty($_POST["druh"])) {$sql.=($prvni?" WHERE":" AND")." druh='$_POST[druh]'";$prvni=false;} K druhé "otázce" ti uvedu příklad. Oba řádky číslo 2 udělají ve výsledku to samé. $a = "Ahoj"; $a .= " světe"; echo $a; // Ahoj světe $a = "Ahoj"; $a = $a." světe"; echo $a; // Ahoj světe |
||
Jcas Profil * |
#13 · Zasláno: 8. 11. 2010, 20:19:02
Perfektní. Díky moc
Možná by jste to mohli zveřejnit, jako nějaký článek pro vícenásobnou selekci z databáze. (Teda pokud chcete radit laikům. Všude je totiž pouze vysvětleno, jak použít jednu, max dvě selekce. A potom musí člověk buď kompletně studovat programovaní, nebo si to nějak vymyslet, nebo otravovat na foru. |
||
Časová prodleva: 13 let
|
0