Jump to content
php.lv forumi

Sludinājuma portāla datubāzes selekti


test2

Recommended Posts

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

Link to comment
Share on other sites

  • Replies 34
  • Created
  • Last Reply

Top Posters In This Topic

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?

Link to comment
Share on other sites

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ā.

Link to comment
Share on other sites

  • 2 weeks later...
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!

Link to comment
Share on other sites

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 by test2
Link to comment
Share on other sites

"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...

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by black
Link to comment
Share on other sites

  • 5 weeks later...

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>...

Link to comment
Share on other sites

  • 5 years later...

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. mhihi.gif Edited by Val
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...