codez Posted February 21, 2009 Report Share Posted February 21, 2009 tabula cat: id|pid|name 1 0 Auto 2 0 Nekustamie Ipasumi 3 1 Opel 4 1 Audi 5 1 Volvo 6 3 Omega 7 3 Astra 8 4 A4 9 4 A6 Piemēram tu izvēlies kategoriju Auto, kuras id=1, tad pievienot apakškategoriju ir vienkārši INSERT INTO cat SET pid=1,name='Fiat'; tagad tev pievienojas ieraksts 10 1 Fiat Tālāk, lai pievienotu Fiat modeļus: INSERT INTO cat SET pid=4,name='KautkadsFiatModelis'; Tev pievienosies ieraksts 11 4 KautkadsFiatModelis Lai tagad dabūtu visus Auto, taisi SELECT * FROM cat WHERE pid=1 Tev izvadīs 3 1 Opel 4 1 Audi 10 1 Fiat Lai ietu dziļāk kategorijā, izvēlies attiecīgo marku, paņem id un tāds pats kverijs, tikai cits id SELECT * FROM cat WHERE pid=3 6 3 Omega 7 3 Astra Quote Link to comment Share on other sites More sharing options...
Web Developer Posted February 21, 2009 Report Share Posted February 21, 2009 test2, tak palasi grāmatas, pirms ķeries klāt datubāzēm... Quote Link to comment Share on other sites More sharing options...
test2 Posted February 21, 2009 Author Report Share Posted February 21, 2009 Ok, lai nettaisītu jaunu topiku jautāšu tepat, itkā ar visām kategorijām, kuras, manuprāt, ir pats čakarīgākais esmu ticis ļoti veiksmīgi galā, esmu tik laimīgs... :D Lab tagad Jūs mani varētu paknonsultēt šādā jautājumā: Kā veidot sludinājumu tabulu? Jūs domāsiet kas tur ko nezināt? Bet tas nemaz tik vienkārši, manurpāt, nebūs, jo man, piemēram, vajag tā, ka paņem transports - > auto -> bmw un pievienot sludinājumu, tad tur ir lauki Cik litru motors, dzinēja tilpums, krāsa utt, bet atkal citā sadaļā šos laukus nevajadzēs, bet vajadzēs, piemēram, drēbes izmērs, cerams, ka paskaidroju saprotami. Tad nu kādi ir ieteikumi šai sadaļai, tai gan noteikti vajadzēs 2vas tabulas vai ne? Quote Link to comment Share on other sites More sharing options...
Web Developer Posted February 21, 2009 Report Share Posted February 21, 2009 1) tev ir sludinājumu kategorijas jeb tā sauktā "vocabulary" vai "tags" vai arī "taxonomy" (kā, piemēram, Drupal). Šīs kategorijas izvietotas kokveida struktūrā. Tām vajadzēs vienu tabulu. CREATE TABLE `Categories` 2) tev ir sludinājumi. Katrs sludinājums ir viena vienība un var būt dažāda tipa. Bet ir noteikti kopējās iezīmes visiem sludinājumiem, kā arī - kādai kategorijai tie pieder. Tā būs otra tabula. CREATE TABLE `Advertisments` ... P.S. varbūt ir kāds veiksmīgāks vārds par Advertisments? 3) tev ir sludinājumu tipi vai vienkārši sludinājumu aizpildāmie lauki - kontroles. Kā būtu labāk - izdomā pats. CREATE TABLE `Advertisment_types` Ja sludinājumu tipi būtībā ir variējami lauki - kontroles, tad iespējams, ka tur jātaisa vēl kāda tabula, kas tās definē... Bet ja vienkāršāk, tad var iztikt ar manis ieteiktām 3 tabulām... Tālākais - jātaisa uz DB dizainera, ievērojot vismaz pirmās 3 datubāžu normālformas, kā arī korektu SQL pieeju. Kaut kā tā. Quote Link to comment Share on other sites More sharing options...
test2 Posted March 3, 2009 Author Report Share Posted March 3, 2009 jā, taisi ORDER BY cat.name; P.S. Un vēl tavā kodā $tmp vajag drukāt iekš IFa, šādi: if ($tmp!=$row['nname']){ $tmp=$row['nname']; echo "<h1>".$tmp."</h1><br />\n"; } echo $row['kname']."<br />\n"; P.S.2 Vispār to ORDER BY tev nevajag, jo tiem cat.name pēc JOINa tāpat vienādiem jābūt pēc kārtas. A man te veleviens jaut radās, tākā man tās sludinājuma sadaļas un apakšsadaļas listojas caur table, man vajadzētu izdarīt arī tā, ka pēc konkurētās nname, kname kategoriju nolistošanas ielikas </td>, kā man to izdarīt Ilgi jau mocos, bet nespēju tik galā ar šo! Quote Link to comment Share on other sites More sharing options...
bubu Posted March 3, 2009 Report Share Posted March 3, 2009 Šitā? echo $row['kname']."</td>\n"; Ja nē, tad kā tu to tabulu tur taisi - t.i. kurā brīdī tev vajag to </td> ? Quote Link to comment Share on other sites More sharing options...
test2 Posted March 3, 2009 Author Report Share Posted March 3, 2009 (edited) Bet tagad radās velviens jautājums, piemēram ok tie TD ar tiem skaidrs itkā ir, bet kā man izdarīt, lai <tr> aizveras un izvadas ik pēc trešās kategorijas, itkā zinu paņēmienu, kā to izdarīt, bet man tie ieraksti skaitās arī ar katru apakškategoriju, respektīvi, ja es izmantoju ko šādu: $td=0; ... if($td == 0) { echo '<tr>'."\n"; } ... if($td==3) { echo '</tr>'."\n"; } $td = ($td+1) % 5; Tad sanāk ka skaitītas tiks arī apakškategorijas, kā to izlabot? Cerams, ka esmu izteicies skaidri :) edit jāaa viss sanaaca, tanksons! Edited March 3, 2009 by test2 Quote Link to comment Share on other sites More sharing options...
bubu Posted March 3, 2009 Report Share Posted March 3, 2009 Jā, tagad tu esi izteicies skaidri. Tieši ar to pašu veidu, ko tu parādīji (tikai 5 vietā liec 3), lieto lai ik pēc trīs kategorijām ieliktu jaunu rindu. Quote Link to comment Share on other sites More sharing options...
test2 Posted March 6, 2009 Author Report Share Posted March 6, 2009 "SELECT txt.name as txtname, txt2.type as txt2type, txt2.name as txt2name, txt2.main as txt2main FROM txt LEFT JOIN txt2 ON ( txt.id = txt2.txt_id ) WHERE tas='ar to' AND tas='ar shito'"; Tātad šāds ir mans selekts jautājums ir sekojoš, kā man viņu apstrādāt lai varu izvadīt šitā: Vispirms izvadu txtname (tas ir kā virsraksts) Tālāk ja txt2main ir 1 un txt2type ir select tad seko: <select name="txtname"> ja txt2main ir 0, tad izvadam option: <option value="txt2name"></option> Ja piemēram seko ka txt2type ir input, tad vnk parastu inputu un selekts ar option nav vajadzīgs. Nu būtībā tabulas struktūra šāda: txt: id|name 1 Name1 2 Name2 txt2: txt_id | type | name | main 1 input Name1 1 2 select Name2 1 2 select Name3 0 2 select Name4 0 2 select Name5 0 Es vnk nespēju izdomāt, kā to varētu panākt... Pagaidām man ir šāds kods: if ($virsraksts!=$d['txtname']){ $virsraksts=$d['txtname']; echo ''.$virsraksts.': '; } if($d['txt2main']==0){ if($d['vtype']=="input"){ echo ''; }else{ if ($name!=$d['txtname']){ $name=$d['txtname']; echo '<select name="'.$d['txtname'].'" size="1">'; } echo '<option value="'.$d['txt2name'].'"></option>'; } } Bet es nezinu kā panākt to, ka katra selecta beigās noliek </select> un vsp šaubos vai esmu uz pareizā ceļa, jo kods liekas ačgārns un izvada kkādaus mistiskus papildus selektus... Quote Link to comment Share on other sites More sharing options...
bubu Posted March 6, 2009 Report Share Posted March 6, 2009 Manuprāt kverijam galā jābūt ORDER BY txt2.txt_id, txt2.main DESC citādi var gadīties, ka tie inputi kverijā neatgriezīsies tieši aiz atbilstošā select'a, bet kautkādā "random" kārtībā. Bet php kods ir ļoti vienkāršs: $select_is_opened = false; while ($row = mysql_fetch_assoc($query)) { if ($row["txt2type"] == "select" && $row["main"] == "0") { echo "<option value={$row[txt2name]}>...</option>"; } else { if ($select_is_opened) { echo "</select>"; $select_is_opened = false; } if ($row["txt2type"] == "input") { echo "<input ... />"; } else { echo "<select name={$row[txt2name]}>"; $select_is_opened = true; } } } if ($select_is_opened) { echo "</select>"; } Lūdzu lieto BBkodu [ code ] apkārt kodam, citādi tas bez normālas identācijas grūti lasās. Un vēl - padomā vai tiešām esi izvēlējies pareizu tabulas txt2 struktūru. Man liekas, ka ar šādu struktūru tikai vairāk problēmas dabūsi nekā labuma. Piemēram, input laukiem ir pilnīgi nevajadzīgs tas main lauks. Es tādu main vispār neliktu tur iekšā, bet gan taisītu trešo tabulu, kurā liktu option vērtības. Tavam piemēram tas izskatītos šādi: txt2: id | txt_id | type | name 3 1 input Name1 5 2 select Name2 txt3: txt2_id | name 5 Name3 5 Name4 5 Name5 Quote Link to comment Share on other sites More sharing options...
black Posted March 6, 2009 Report Share Posted March 6, 2009 (edited) Man ir aizdomas, ka iepriekš pieminētais kategoriju variants nozīmē, ka kategoriju dziļums ir stipri ierobežots. Piemēram, 5 līmeņu kategorijas (ļoti iespējama lieta sludinājumu portālā) prasītu 4 left joinus. Sludinājumu portālam es ieteiktu 'Nested set' modeli, kas ir mazliet sarežģītāks izmantošanā (pievienojot jaunu kategoriju var nākties labot pārējo kategoriju datus), bet toties ir ļoti, ļoti ātrs tad, kad kategoriju koku vajag dabūt ārā. Pieņemot, ka sludinājumu portālā kategorijas nemainās katru minūti, bet kategoriju koku lietotāji gan var vēlēties apskatīt bieži, šis, manuprāt, ir ideāls risinājums. Patiesībā, šis bija variants, ko izmantoju, kad pats pēdējo reizi taisīju sludinājumu portālu. Edited March 6, 2009 by black Quote Link to comment Share on other sites More sharing options...
test2 Posted April 6, 2009 Author Report Share Posted April 6, 2009 Es par to bubu kodu, gribēju jautāt ka salabot to, ka kā tikko uzliek ORDER, lai nesajūk viss, jo kā tikko pielieku klāt orderu viss sajiet grīzstē, respektīvi selekta optioni mistiski izvadas bez <select></select>... Quote Link to comment Share on other sites More sharing options...
test2 Posted April 7, 2009 Author Report Share Posted April 7, 2009 Tiešām neviens nevar palīdzēt? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted April 7, 2009 Report Share Posted April 7, 2009 Tiešām palīdzētu, jaa Tu pilnīgāk paskaidrotu, kāda ir problēma. Vismaz parādi, kā izskatās tas nepareizais izvads. Quote Link to comment Share on other sites More sharing options...
Val Posted August 18, 2014 Report Share Posted August 18, 2014 (edited) Pacelšu mironi un paturpināšu tepat. Taisu tā kā maziņu sludinājumu sadaļu. Kā jau augstāk minēts, tad auto sadaļai būs citi lauki, kaķu sadaļai motora tilpums nav vajadzīgs. Sēžu un domāju tabulu struktūru, lai var definēt dažādus laukus dažādām sadaļām. Varbūt kāds no malas var pakomentēt vai ieteikt, ko taisīt savādāk. Pamatlietas: tabula classifieds: id title slug description date email value location blablabla tabula classifieds_categories id category slug parent_id hidden depth Interesējošās lietas: tabula classifieds_attributes (dažādi lauki, kurus var piekarināt pie konkrētām sludinājumu kategorijām) id category_id attribute_name attribute_type (select, input, radio, ...) attribute_label classifieds_values id classifieds_id attribute_id attribute_value Nesmuki sanāk ar attribute_value, jo tur var būt gan skaitlis, gan teksts. Edited August 18, 2014 by Val Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.