ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: p44n ที่ 08 มีนาคม 2012, 15:05:19



หัวข้อ: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: p44n ที่ 08 มีนาคม 2012, 15:05:19
โจทย์ :

มี select อยู่ 5 ตัว เช่น
select A มี 3 ค่า A1 A2 A3
select B มี 3 ค่า B1 B2 B3
select C มี 3 ค่า C1 C2 C3
select D มี 3 ค่า D1 D2 D3
select E มี 3 ค่า E1 E2 E3

ตัวอย่างที่เจอเช่น เว็บรถ select ประเภทรถ --> select ยี่ห้อ --> select ปี --> select ราคา

ท่านใช้ LOGIC ไหนกันอยู่ครับ
ส่วน Logic ของผมนั้น ผมมองมันน่าจะกระชับกว่านี้ได้ เลยหาความรู้เพิ่มเติมจากโปรแกรมเมอร์ในนี้ครับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: jubajuba ที่ 08 มีนาคม 2012, 15:08:37
งงกะคำถามอะครับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: tinnakorn ที่ 08 มีนาคม 2012, 15:20:48
หมายถึง คำสั่ง ส่งค่าจาก form (Select 5 ค่า)  ไป query จากฐานข้อมูล sql หรือครับ ?


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: p44n ที่ 08 มีนาคม 2012, 15:23:50
select ประเภท เช่น ทุกประเภท, กระบะ,เก๋ง
select ยี่ห้อ เช่น ทุกยี่ห้อ,ฮอนด้า,โตโยต้า

ท่าน check แล้ว select database ยังไง ของผมทำไมเขียนยังไง ทำไมมันยาวจัง


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: tinnakorn ที่ 08 มีนาคม 2012, 15:39:22
ออกแบบ table ฐานข้อมูลยังไงหรือครับ ถ้าเป็น table เีดียว จะใช้คำสั่ง query ได้ไม่ยาก
ที่ผมใช้อยู่

รับค่า  $x =  'AND 'x' = '".$_POST['x']."';
     $y =  'AND 'y' = '".$_POST['y']."';
     $z =  'AND 'z' = '".$_POST['z']."';

คำสั่ง sql : $q= 'select * from table where '".$x.$y.$z"';
           
           $qr = mysql_query($q);

อะไรประมาณนี้ พอช่วยได้ไหมครับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: blogbooking ที่ 08 มีนาคม 2012, 15:43:33
เปลี่ยนโจทย์ใหม่หน่อยนะครับ ว่าจะจัดหมวด(Category)แบบไหนดีสำหรับรายละเีอียดแบบนี้
-------------------------
มี select อยู่ 5 ตัว เช่น
select A มี 3 ค่า A1 A2 A3
select B มี 3 ค่า B1 B2 B3
select C มี 3 ค่า C1 C2 C3
select D มี 3 ค่า D1 D2 D3
select E มี 3 ค่า E1 E2 E3
-------------------------
<table border="1" width="100%">
   <tr>
      <td>description(<span lang="th">รถตามตัวอย่าง</span>)</td>
      <td><span lang="th">ประเภท</span>(<span lang="th">เก๋ง</span>-&gt;A1<span lang="th">/กระบะ</span>-&gt;A2<span lang="th">/</span>suv-&gt;A3)</td>
      <td><span lang="th">ยี่ห้อ</span>(Toyota-&gt;B1/Honda-&gt;B2/Nissan-&gt;B3)</td>
      <td><span lang="th">ปี</span>(2010-&gt;c1/2011-&gt;c2/2012-&gt;c3)</td>
      <td><span lang="th">รุ่น</span>(specific)</td>
   </tr>
   <tr>
      <td>select A</td>
      <td>A1</td>
      <td>B1</td>
      <td>C1</td>
      <td>123</td>
   </tr>
   <tr>
      <td>select B</td>
      <td>A2</td>
      <td>B2</td>
      <td>C2</td>
      <td>254</td>
   </tr>
   <tr>
      <td>select C</td>
      <td>A3</td>
      <td>B3</td>
      <td>C3</td>
      <td>256</td>
   </tr>
   <tr>
      <td>select D</td>
      <td>A1</td>
      <td>B1</td>
      <td>C2</td>
      <td>452</td>
   </tr>
   <tr>
      <td>select E</td>
      <td>A2</td>
      <td>B2</td>
      <td>C1</td>
      <td>254</td>
   </tr>
</table>
------------------------
แล้วจะใช้คำสั่ง sql select ข้อมูลขึ้นมาใช่ไหม ถ้าใช่ก็น่าจะแถวๆนี้

select field(ถ้าเอาทั้งหมดก็ *) from table_name whare ก็ว่ากันไปตามเงื่อนไขเช่น
select *from table_name where ประเภท = A1
ผลก็จะโชว์เหลือเฉพาะ
select A,Select E
แล้วถ้าจะเลือกซ้่อน ก็ซ้อนกันไปอีกชั้นก็เท่านั้น ก็คือจากหน้า result ใส่ตัวแปรแล้วก็ไล่เข้าไปอีกทีโดยใช้ sql statement เหมือนเดิม
แต่กรณี multi searching เค้าจะใช้แบบนี้
Var_type=.......
Var_Year=.......
Var_Brand=......
แล้วก็
select *from table_name where ประเภท =Var_type,Year=Var_Year,Brand=Var_brand

เพราะจริงๆมันใช้ตัว filter ธรรมดาก็ได้ลองดูครับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: p44n ที่ 08 มีนาคม 2012, 15:54:46
ออกแบบ table ฐานข้อมูลยังไงหรือครับ ถ้าเป็น table เีดียว จะใช้คำสั่ง query ได้ไม่ยาก
ที่ผมใช้อยู่

รับค่า  $x =  'AND 'x' = '".$_POST['x']."';
     $y =  'AND 'y' = '".$_POST['y']."';
     $z =  'AND 'z' = '".$_POST['z']."';

คำสั่ง sql : $q= 'select * from table where '".$x.$y.$z"';
          
           $qr = mysql_query($q);

อะไรประมาณนี้ พอช่วยได้ไหมครับ

มันควรจะเป็นแบบนี้ล่ะคับ แต่มันจะมี select ที่ไม่ได้เลือกค่ามาด้วย คือค่า "ทุกประเภท" คับ เช่น AND y='ฮอนด้า' กับ AND y='ทุกประเภท' ซึ่งในฐานข้อมูล ไม่มียี่ห้อทุกประเภท
ผมต้องมาลบค่า $y ก่อน query ให้เหลือเฉพาะ where $x.$z
ถ้าเราบังคับให้เลือกก็จบ แต่ความเป็นจริง เราก็ไม่อยากบังคับว่าต้องเลือก

ขอบคุณคับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: ossytong ที่ 08 มีนาคม 2012, 16:19:08
normalization ใหม่เถอะครับ

ถ้าจะต้อง SELECT โดยใช้ ชื่อยี่ห้อ มากำหนดใน where แบบนี้


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: MeenyFancy ที่ 08 มีนาคม 2012, 16:22:58
Front end
โค๊ด:
<select id="car" name="car">
  <option value="-1">select</option>
  <option value="1">Toyota</option>
  <option value="2">Honda</option>
  <option value="3">Mercedes</option>
  <option value="4">Audi</option>
</select>

<select id="year" name="year">
  <option value="-1">select</option>
  <option value="1">1990-2000</option>
  <option value="2">2001-2005</option>
  <option value="3">2006-2012</option>
</select>

Back end
โค๊ด:
$car = $_POST["car"];
$year = $_POST["year"];
$sql = "select * from cardatabase where 1=1 ";
if ($car <> "-1"){
   $sql = $sql . " and car = '" . $car . "'";
}
if ($year  <> "-1"){
   $sql = $sql . " and year = '" . $year . "'";
}

ประมาณนี้ปะ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: tinnakorn ที่ 08 มีนาคม 2012, 17:08:10
ออกแบบ table ฐานข้อมูลยังไงหรือครับ ถ้าเป็น table เีดียว จะใช้คำสั่ง query ได้ไม่ยาก
ที่ผมใช้อยู่

รับค่า  $x =  'AND 'x' = '".$_POST['x']."';
     $y =  'AND 'y' = '".$_POST['y']."';
     $z =  'AND 'z' = '".$_POST['z']."';

คำสั่ง sql : $q= 'select * from table where '".$x.$y.$z"';
          
           $qr = mysql_query($q);

อะไรประมาณนี้ พอช่วยได้ไหมครับ

มันควรจะเป็นแบบนี้ล่ะคับ แต่มันจะมี select ที่ไม่ได้เลือกค่ามาด้วย คือค่า "ทุกประเภท" คับ เช่น AND y='ฮอนด้า' กับ AND y='ทุกประเภท' ซึ่งในฐานข้อมูล ไม่มียี่ห้อทุกประเภท
ผมต้องมาลบค่า $y ก่อน query ให้เหลือเฉพาะ where $x.$z
ถ้าเราบังคับให้เลือกก็จบ แต่ความเป็นจริง เราก็ไม่อยากบังคับว่าต้องเลือก

ขอบคุณคับ

ถ้า "ทุกประเภท" ค่า x,y หรือ z ที่ส่งมาไม่มีค่านะครับ

รับค่า  if($_POST['x']){$x =  'AND 'x' = '".$_POST['x']."';}else{ $x =''; } //ไม่ส่ง x กรณีไม่มี x ส่งมาให้ $x = '';
     if($_POST['y']){$y =  'AND 'y' = '".$_POST['y']."';}else{ $y =''; } //ไม่ส่งค่า y
     if($_POST['z']){$z =  'AND 'z' = '".$_POST['z']."';}else{ $z =''; } //ไม่ส่งค่า z

    $q= 'select * from table where id '".$x.$y.$z"';

ผมใช้วิธีนี้อยู่ ไอเดียคล้ายท่าน MeenyFancy พี่ post ไว้ข้างบนเลยครับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: tapanon ที่ 08 มีนาคม 2012, 17:42:57
งง  :P   


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: Railway ที่ 08 มีนาคม 2012, 17:53:17
normalization ใหม่เถอะครับ

ถ้าจะต้อง SELECT โดยใช้ ชื่อยี่ห้อ มากำหนดใน where แบบนี้

ผมก็ว่างั้น เขียนขอบเขตแล้ว normalization ใหม่ดูครับ เพื่อเวลาเรียกใช้งานได้ไม่ซับซ้อน ถ้าไม่ได้ normalization เขียนยังไงก็ไม่สั้นครับ และซับซ้อนด้วย


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: p44n ที่ 08 มีนาคม 2012, 18:03:21
สั้นสุด ได้ if else 5 รอบ จาก 5 select ก้อถือว่าโอคับ ดูเป็นระเบียบดี ไม่น่าจะหนัก


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: tdelphi ที่ 08 มีนาคม 2012, 18:45:33
โจทย์นี้คล้าย  จังหวัด-->อำเภอ-->ตำบล
ใช้ ajax ครับ


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: arabanaki ที่ 08 มีนาคม 2012, 20:36:29
เหมือนผมจะตอบได้ แต่คิดไปคิดมาเริ่มงงละ  :wanwan031:


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: bonshington ที่ 09 มีนาคม 2012, 19:16:04
table Parameter
tag
key
val

เช่นว่า
tag = CAR_CATEGORY, key = SPORT, val = รถสปอร์ต
และ
tag = CAR_COLOR, key = FFFFFF, val = White
tag = CAR_COLOR, key = FF0000, val = Red

เวลาใช้
select c.*, p_cat.*, p_color.*
from Car c
join Parameter p_cat on p_cat = 'CAR_CATEGORY' and p_cat.key = c.category
join Parameter p_color on p_color = 'CAR_COLOR' and p_color.key = c.color

ข้อดีคือรวม parameter ไว้ table เดียว ดูแลง่าย ทำ index ง่าย และไม่ซับซ้อน

หรือถ้าอยาก select หลายๆที แต่ให้มันเร็ว แนะนำภาษา PL เช่น PL Postgres หรือ PL Oracle
เช่นว่า
declare _cars cursor for select * from Car;
declare _colors cursor for select * from Parameter where tag = 'CAR_COLOR';
declare _categories cursor for select * from Car where tag = 'CAR_CATEGORY';

open _cars;
open _colors;
open _categories;

return next _cars;
return next _colors;
return next _categories;

ถ้าเป็น PL มันจะ return ได้หลาย select ด้วยการ call ครั้งเดียว


หัวข้อ: Re: โปรแกรมเมอร์ทุกท่านๆ ใช้ logic ไหนอยู่ครับ
เริ่มหัวข้อโดย: p44n ที่ 09 มีนาคม 2012, 19:59:04
ขอบคุณแนวทางของแต่ละท่าน ทำให้ผมได้ไอเดีย เขียนโค้ดที่สั้น กระชับ เข้าใจง่ายไว้ใช้งาน