ใน mysql จะเช็คยังไงว่า id นี้อยู่ลำดับที่เท่าไหร่ครับ

เริ่มโดย noob, 17 สิงหาคม 2008, 17:04:02

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

noob

ใน mysql จะเช็คยังไงว่า id นี้อยู่ลำดับที่เท่าไหร่ครับ

ใช้ php แล้วต้องเรียกใช้ทุกหน้าเลยครับ (คือกลัวโค้ดมันจะทำงานหนักมาก) พอจะมีวิธีรึเปล่าครับ
ตราบใดที่โฆษนายังขึ้นอยู่ ก็แปลว่าตูยังไม่โดนแบน

noob

ตราบใดที่โฆษนายังขึ้นอยู่ ก็แปลว่าตูยังไม่โดนแบน

h.newyear28

ผมว่าเขางงคำถามคุณมากกว่า
ID มันก็บอกลำดับอยู่แล้วนิครับ :-X (ในกรณีที่เป็น auto-increment, primary)

kiak

อ้างถึงจาก: h.newyear28 ใน 19 สิงหาคม 2008, 21:17:08
ผมว่าเขางงคำถามคุณมากกว่า
ID มันก็บอกลำดับอยู่แล้วนิครับ :-X (ในกรณีที่เป็น auto-increment, primary)
เห็นด้ว งง คับ
แต่ว่าถ้าลองตั่งให้เป็น primary key แล้วก็มันจะทำงานไม่หนักครับ
เพราะถ้าเรียกอะไรที่เป็น primary มันจะเข้าไปที่ข้อมูลบรรทัดนั้นทันที แต่ว่าถ้าไม่ใช่ มันจะค่อยๆเช็กไปเรื่อยๆ จนกว่าจะเจออะ พวก like งี้
[direct=http://www.thaiseoboard.com/]Arkkkk.com น้องของ simsimi อยากคุยกับทุกคนค้าบ[/direct]
[direct=http://pheonize.in.th/cheapwebsitebuilting]ดูแลเว็บ[/direct]
[direct=http://www.writer.in.th/book/28]วิธีใช้ SVN[/direct]
[direct=http://www.truebugs.com/]เขียนโปรแกรมแล้วเจอปัญหาหรอ มาที่ truebugs สิ[/direct]

pugkung

คิดว่าเข้าใจที่ถามนะ

คงจะประมาณว่า id ที่ว่ามันโดนลบไปแล้วเกิดช่องว่างระหว่าง id ใช่ป่ะ

แล้วต้องการทราบว่า ตำแหน่งที่ id นั้น ๆ อยู่ มันอยู่ลำดับที่เท่าไรของ db

สำหรับคนที่ งง คิดว่า id ของเค้าน่าจะเก็บอยู่ประมาณนี้

1,3,4,5,6,7,11,34,23,44,66,77,88 ........... แล้ว เจ้าของกระทู้ต้องการทราบว่า id 11 อยู่ในลำดับที่เท่าไร

ถ้าเป็นแบบนี้นะ ก็ query ออกมาเก็บไว้ใน array อ่ะครับ แล้วก็ loop หาเอา ( มั่งนะลองดู ??? )

DJJome

อ้างถึงจาก: pugkung ใน 22 สิงหาคม 2008, 18:41:25
คิดว่าเข้าใจที่ถามนะ

คงจะประมาณว่า id ที่ว่ามันโดนลบไปแล้วเกิดช่องว่างระหว่าง id ใช่ป่ะ

แล้วต้องการทราบว่า ตำแหน่งที่ id นั้น ๆ อยู่ มันอยู่ลำดับที่เท่าไรของ db

สำหรับคนที่ งง คิดว่า id ของเค้าน่าจะเก็บอยู่ประมาณนี้

1,3,4,5,6,7,11,34,23,44,66,77,88 ........... แล้ว เจ้าของกระทู้ต้องการทราบว่า id 11 อยู่ในลำดับที่เท่าไร

ถ้าเป็นแบบนี้นะ ก็ query ออกมาเก็บไว้ใน array อ่ะครับ แล้วก็ loop หาเอา ( มั่งนะลองดู ??? )

ผมก็เข้าใจตามนี้นะ
แต่มองไม่เห็นประโยชน์ ว่าทำไปทำไม?

sangsood7

ยังงี้ได้เปล่าครับ  ไม่แน่ใจเดาเอา

select count(id) from $tablename where id<=$id

:-*


noob

ขอบคุณทุกท่านที่ช่วยแนะนำครับผม

แล้วก็ขอบคุณท่าน pugkung ที่ช่วยขยายความนะครับ หุหุ
ตราบใดที่โฆษนายังขึ้นอยู่ ก็แปลว่าตูยังไม่โดนแบน

DJJome

อ้างถึงจาก: noob ใน 23 สิงหาคม 2008, 02:26:42
ขอบคุณทุกท่านที่ช่วยแนะนำครับผม

แล้วก็ขอบคุณท่าน pugkung ที่ช่วยขยายความนะครับ หุหุ

แล้วตกลง จะทำไปทำไมอ่ะครับ ผมยังไม่เข้าใจเลยนะ

pugkung

อ้างถึงจาก: DJJome ใน 23 สิงหาคม 2008, 05:16:57
อ้างถึงจาก: noob ใน 23 สิงหาคม 2008, 02:26:42
ขอบคุณทุกท่านที่ช่วยแนะนำครับผม

แล้วก็ขอบคุณท่าน pugkung ที่ช่วยขยายความนะครับ หุหุ

แล้วตกลง จะทำไปทำไมอ่ะครับ ผมยังไม่เข้าใจเลยนะ

เท่าที่คิดออก ก็คงจะเป็นพวกโปรแกรม เอาไว้บันทึกการรับจำนำมือถือ ล่ะมั่ง

ซึ่งพวกร้านรับจำนำมือถือเค้าจะมี กล่อง ที่มี ล็อกเกอร์ อยู่หลาย  ๆ  อัน แล้วเค้าจะเก็บ มือถือไว้ที่ ล็อกเกอร์ นั้น ๆ เรียงกันไป

แล้วพอมีคนมาไถ่ มือถือออก เค้าก็จะยื่นบัตรจำมา แล้วเจ้าของร้านก็ไปหยิบมือถือมา ล็อกเกอร์นั้น ๆ จึงว่าง

แล้วทีนี้มีลูกค้าใหม่มาจำนำ เจ้าของร้านก็ต้องหา ล็อกเกอร์ที่ว่าง นั้นเพื่อเอาไปเก็บมือถือ ก็เลยต้องใช้วิธีนี้ล่ะมั่ง  ???

อ่านเองยัง งง เอง เหอ ๆ

แต่คิดว่าเจ้าของกระทู้คงไม่ได้เอาไปใช้เพื่อการนี้  :P

payu


อ้างอิง ...
=http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

หรือค้นหา "mysql row number" จาก gg

ตัวอย่าง code

set @num  = 1;

select @num := @num + 1 as row_number, *
from table;


concept ประมาณนี้ครับ .. แต่ยังไม่ได้ลอง

[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

noob

อ้างถึงจาก: DJJome ใน 23 สิงหาคม 2008, 05:16:57
อ้างถึงจาก: noob ใน 23 สิงหาคม 2008, 02:26:42
ขอบคุณทุกท่านที่ช่วยแนะนำครับผม

แล้วก็ขอบคุณท่าน pugkung ที่ช่วยขยายความนะครับ หุหุ

แล้วตกลง จะทำไปทำไมอ่ะครับ ผมยังไม่เข้าใจเลยนะ

คือผมจะเอาไว้ใช้เช็คหน้าปัจจุบันของบทความครับ อ่ะงงๆ

ประมาณว่าบทความผมแบ่งออกเป็น 10 หน้า หน้าละ 10 บทความ

ผมเปิดอ่านบทความที่หน้า 5 ก็จะดึงบทความทั้งหมดที่อยู่หน้าเดียวกันมาแสดงด้านล่าง

ทีนีถ้าผมรู้ว่าบทความที่ผมเปิดอ่านอยู่มันอยู่ลำดับที่เท่าไหร่ ก็จะเอามาคำนวนหาหน้าปัจจุบันได้

โดยที่ไม่ต้องส่งตัวแปรของเลขหน้าปัจจุบันลงไปใน url

เพราะจำนวนหน้าของบทความมันจะขยับไปเรื่อยๆ จะทำให้ url มันไม่เหมือนเดิม ไม่ดีต่อค่า pr ของหน้านั้นๆ
อาจจะมีวิธีที่ดีกว่านี้ก็ได้แต่ผมคิดออกแค่นี้ แหะๆ :-[



อ้างถึงจาก: payu ใน 23 สิงหาคม 2008, 10:45:16

อ้างอิง ...
=http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

หรือค้นหา "mysql row number" จาก gg

ตัวอย่าง code

set @num  = 1;

select @num := @num + 1 as row_number, *
from table;


concept ประมาณนี้ครับ .. แต่ยังไม่ได้ลอง



ขอบคุณมากครับ แต่ผมยังมองภาพไม่ออกว่าเขียนในรูปโค้ด php ยังไงอ่ะครับ

คือความรู้ผมยังด้อยนักครับ รบกวนท่านช่วยแนะนำเพิ่มเติมด้วยครับ
ตราบใดที่โฆษนายังขึ้นอยู่ ก็แปลว่าตูยังไม่โดนแบน

EThaiZone

ผมมาอ่าน ผมยังงงเลย อะไรจะยุ่งยากขนาดนั้น

เว็บบทความ เอาแบบง่ายๆ เลย

แทรกบทความไปตามปกติ ตั้ง primary key กับ auto number ให้กับฟิลด์ id

แล้วใช้ฟิลด์นี้ในการเรียกหน้าบทความเลย ex.  page.php?id=เลขบทความ

ทีนี้เวลาจะมาแสดงในการแบ่งหน้า
ต้องมีข้อมูลตัวสำคัญคือ จำนวนบทความทั้งหมด
SELECT COUNT(*) FROM TABLE


แล้วก็มาคำนวนหาหน้าที่น่าจะมีทั้งหมด
$per_page = 10; //จำนวนบทความต่อหน้า
$total = ceil($all/$per_page);

โดย $all คือจำนวนบทความทั้งหมด ส่วน $total จะได้เป็นจำนวนหน้าที่น่าจะมีทั้งหมด

แล้วเวลาจะเรียกแสดงรายการบทความในหน้านั้น ก็แนว

$start = $page*$per_page;
SELECT * FROM article ORDER BY id DESC LIMIT $start,$per_page

ประมาณนี้ครับ ลองดูนะ  :P


noob

อ้างถึงจาก: EThaiZone ใน 25 สิงหาคม 2008, 00:09:17
ผมมาอ่าน ผมยังงงเลย อะไรจะยุ่งยากขนาดนั้น

เว็บบทความ เอาแบบง่ายๆ เลย

แทรกบทความไปตามปกติ ตั้ง primary key กับ auto number ให้กับฟิลด์ id

แล้วใช้ฟิลด์นี้ในการเรียกหน้าบทความเลย ex.  page.php?id=เลขบทความ

ทีนี้เวลาจะมาแสดงในการแบ่งหน้า
ต้องมีข้อมูลตัวสำคัญคือ จำนวนบทความทั้งหมด
SELECT COUNT(*) FROM TABLE


แล้วก็มาคำนวนหาหน้าที่น่าจะมีทั้งหมด
$per_page = 10; //จำนวนบทความต่อหน้า
$total = ceil($all/$per_page);

โดย $all คือจำนวนบทความทั้งหมด ส่วน $total จะได้เป็นจำนวนหน้าที่น่าจะมีทั้งหมด

แล้วเวลาจะเรียกแสดงรายการบทความในหน้านั้น ก็แนว

$start = $page*$per_page;
SELECT * FROM article ORDER BY id DESC LIMIT $start,$per_page

ประมาณนี้ครับ ลองดูนะ  :P



:P แหะๆ ผมพวกชอบคิดมากครับ อย่าถือสาเลย อิอิ

$start = $page*$per_page;
SELECT * FROM article ORDER BY id DESC LIMIT $start,$per_page

แล้วโค้ดนี่ ตัวแปร $page จะส่งมาจากไหนอ่ะครับ

ปล.ผมมีฟิล id เป็น primary key กับ auto number แล้วครับ แต่พอดีบางข้อความก็ถูกลบไป เลข id มันก็เลยจะข้ามๆไปเรื่อยครับ
ตราบใดที่โฆษนายังขึ้นอยู่ ก็แปลว่าตูยังไม่โดนแบน

kiak

$page คือ จำนวนข้อมูลทั้งหมดครับ select * from แล้ว numrow ครับ



ลองดู http://www.webthaidd.com/php/webthaidd_article_90_3.html
[direct=http://www.thaiseoboard.com/]Arkkkk.com น้องของ simsimi อยากคุยกับทุกคนค้าบ[/direct]
[direct=http://pheonize.in.th/cheapwebsitebuilting]ดูแลเว็บ[/direct]
[direct=http://www.writer.in.th/book/28]วิธีใช้ SVN[/direct]
[direct=http://www.truebugs.com/]เขียนโปรแกรมแล้วเจอปัญหาหรอ มาที่ truebugs สิ[/direct]

7

id ไม่เปลี่ยน url ก็ไม่เปลี่ยน ถึงจะข้ามก็ไม่เห็นเป้นไรเลย

noob

มันไม่ใช่อย่างนั้นนะสิครับ ผมจะอธิบายยังไงดีล่ะ....... :P

ยกตัวอย่างจากเว็บที่ท่าน kiak แนะนำมานะครับ



จากในรูปนี่มันอยู่ที่หน้า 3 นะครับ

ก็จะมี id 17-30

สมมุติว่าเราสามารถคลิ๊กเข้าไปอ่านบทความในแต่ละ id ได้ ลิ้งอาจจะประมาณนี้

myweb.com/read.php?id=30
myweb.com/read.php?id=25
myweb.com/read.php?id=24
myweb.com/read.php?id=23
.
.
.
myweb.com/read.php?id=17

แล้วทีนี้ผมคลิ๊กเข้าไปที่ลิ้ง myweb.com/read.php?id=25

ผมก็อยากดึงลิ้งทั้งหมดที่อยู่หน้าเดียวกันให้โชวอยู่ด้านล่าง จะออกมาประมาณนี้

(url: myweb.com/read.php?id=25)


ทีนี้มันจะรู้ได้ไงว่าจะต้องดึงบทความในหน้าที่ 3 มาแสดง เพราะผมไม่ได้สงตัวแปล $page ผ่านทาง url

แล้วทำไมผมไม่ส่งค่า $page ผ่าน url ไปซะเลย myweb.com/read.php?id=25&page=3

เพราะพอบทความผมมีมากขึ้น url ผมก็จะเปลี่ยนไปเป็น &page=4, &page=5, &page=6 ....&page=n

ในเมื่อ url มันเปลี่ยนไปเรื่อยๆแบบนี้มันก็ไม่เป็นผลดีกับค่า pr ของบทความนั้นๆของผมแน่

หวังว่าคงจะพอเข้าใจความตั้งใจผมแล้วนะครับ  :-*
ตราบใดที่โฆษนายังขึ้นอยู่ ก็แปลว่าตูยังไม่โดนแบน

Tee++;

มีวิธีแก้ 4 แบบก็คือ แทนที่จะส่ง link id จริงๆ ข้าไปก็ส่งเป็น iteration คือ

1.
สมมุติ id จริงๆ เป็น 21 แต่ iteration อาจจะเป็น 19 เพราะ มี 2 อันก่อนหน้านี้เป็นลบ พอสั่ง sql ก็จะเป็น

$sql = "SELECT........LIMIT 19, 1";

สังเกตุว่าไม่ได้ใช้ where id = อะไรออกมาเลย

2.
Query Data ทั้งหมดโดยอาจจะ limit สัก 1,000 มาจับยัด ลง memcace, apc หรือ file ก็ได้ โดย cache แค่ results ทีนี้จะหาค่าอะไรก้ใช้คำสั่งใน array ง่ายนิดเดียว ตามแบบนี้ เราสามารถใช้คำสั่ง array_search ก็จะรู้ว่าได้ iteration เป็นลำดับที่เท่าไหร่ แถมเร็วโดย เพราะ query ทีเดียวจบ next page ต่อไปก็ไม่ต้องมา connect db ใหม่ แต่บริหาร ออกแบบยากนิดนึง

3. ใช้ ajax เอาก็ได้แสดงผลแบบนั้น ง่ายนิดเดียวเลย

4. ถ้าห่วงแค่เรื่อง pr ลองทำกลับด้านกันดูโดยที่ นับ page ใหม่เป็น

30 29 28 27 ..... 1

โดยที่ 1 คือ content ที่เก่าที่สุด 30 คือใหม่ที่สุด ทีนี้พอ SE จับ ลำดับก็จะไม่เพี้ยน

*** ถ้าให้เลือกผมเอาวิธี 2, 3 มาใช้ด้วยกัน

ปล. ผมอ่านแค่ rep อันสุดท้ายอ่ะ ไม่ได้อ่านว่าเกิดไรขึ้นตั้งแต่แรก ถ้าไม่ตรงประเด็นก็ sorry นะ
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


tinnoi

สุดยอดเลยครับ

เทคนิคข้างบน มีแต่แบบที่ผมไม่เคยรู้มาก่อน

ความรู้ใหม่ๆ
[direct=https://trainee.naruthee.com]หาที่ฝึกงาน[/direct] ,
[direct=http://www.piyamitrgroup.com]รับรื้อถอน[/direct] ,
[direct=https://fastvisa2024.weebly.com/]รับทำวีซ่า[/direct] ,
[direct=https://business.10thai.com]10thai[/direct]

ball6847

เหอๆ อ่านแต่ละอันผมล่ะ งง หัวไม่ถึงจิงๆ -*-


เป็นผมผมคง cache พวกรายการลง txt คิดได้แค่นี้แหละ - -*
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]