استفاده از WHERE در پرس و جوی MySQL
در حالت اولیه و بدون وجود پارامترهای محدود کننده معمولا دستور SELECT تمام ردیف ها را به عنوان نتیجه پرس و جو از جدول برمی گرداند که ممکن است مورد انتظارمان نباشد و مدت زمان زیادی نیز صرف اجرای فرآیند پرس و جو خواهد شد که در دنیای برنامه نویسی حالت بهینه نیست، به عنوان مثال اگر لیست اسامی ده هزار نفر را در دیتابیس خود به صورت نام، نام خانوادگی و سن داشته باشیم و بخواهیم به فرض تنها افرادی که اسم آنها بهرام است در خروجی انتخاب شوند باید از دستور دیگری تحت عنوان WHERE و پارامترهای آن جهت تکمیل دستور SELECT استفاده کنیم، دستور WHERE در واقع نشانی دقیق ستون و ردیف هایی که ما از MySQL پرس و جو می کنیم را مشخص می کند و از این جهت در کدنویسی PHP در ارتباط با پایگاه داده MySQL اهمیت و کاربرد زیادی دارد.
استفاده از WHERE در دستور SELECT
برای اینکه صرفا ردیف یا ردیف های خاصی به عنوان نتیجه جستجو انتخاب شوند باید از پارامترهای اضافه در پرس جوی SELECT استفاده کنیم، یکی از پرکاربردترین این پارامترها دستور WHERE است که قیدهای زیرمجموعه متفاوتی دارد، به طور مثال امکان استفاده از عملگر مقایسه شامل < = > یا استفاده از عبارت LIKE که در ادامه توضیح خواهیم داد.
در مثال های زیر با استفاده از دستور WHERE و افزودن قیدهایی به آن اطلاعات دقیق تری از پایگاه داده انتخاب می کنیم.
انتخاب ردیف ها از جدول با عملگر = (مساوی):
زمانی که بخواهیم انتخاب نتایج مبتنی بر جود عین یک مقدار رشته ای یا عددی در ستون های دیتابیس باشد می توانیم از عملگر = استفاده کنیم:
WHERE col = 'value'
مثال:SELECT * FROM table WHERE col = 'word'
انتخاب ردیف ها از جدول با عملگر < > (بزرگتر، کوچکتر):در خصوص ستون هایی که از نوع عددی هستند اگر بخواهیم بر اساس مقایسه بزرگتر کوچکتر ردیف ها را انتخاب کنیم عملگرهای < > کاربرد دارند:
WHERE col > value
مثال:SELECT * FROM table WHERE col > 50
این نمونه پرس و جو تمام ردیف ها را از جدول فرضی table در جایی که مقدار ستون فرضی col بزرگتر از 50 باشد انتخاب می کند.انتخاب ردیف ها از جدول با دستور LIKE (شباهت):
اگر تنها برابری بخشی از مقدار موجود در دیتابیس با عبارت مد نظرمان مطلوب باشد گزینه پیش فرض معمولا استفاده از دستور LIKE است:
WHERE col LIKE 'value%'
مثال:SELECT * FROM table WHERE col LIKE 'word%'
این نمونه پرس و جو تمام ردیف ها را از جدول فرضی table در جایی که مقدار ستون فرضی col با عبارت word شروع شده باشد انتخاب می کند.برای یادآوری مباحث گذشته نحوه استفاده از WHERE را با پرس و جوی کامل مرور می کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
exit;
} else{
//سازگاری با حروف فارسی
$sql = "SET NAMES 'utf8'";
$query = mysqli_query($conn, $sql);
//اانتخاب اطلاعات از جدول و ستون ها
$sql = "SELECT * FROM table WHERE col = 'word'";
$query = mysqli_query($conn, $sql);
if(!$query){
echo "Selecting From Table: Error! " . mysqli_error($conn) . '<br>';
} else{
//تعداد ردیف های انتخاب شده
$count = mysqli_num_rows($query);
//پردازش و خروجی ردیف های اطلاعات
if($count > 0){
while($row = mysqli_fetch_array($query)){
echo $row['col'] . '<br>';
}
} else{
echo "No Rows Found in Table!";
}
}
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
exit;
} else {
//سازگاری با حروف فارسی
$sql = "SET NAMES 'utf8'";
$conn->query($sql);
//اانتخاب اطلاعات از جدول و ستون ها
$sql = "SELECT * FROM table WHERE col = 'word'";
$query = $conn->query($sql);
if(!$query){
echo "Selecting Table: Error! " . $query->error() . '<br>';
} else{
//تعداد ردیف های انتخاب شده
$count = $query->num_rows;
//پردازش و خروجی ردیف های اطلاعات
if($count > 0){
while($row = $query->fetch_array()){
echo $row['col'] . '<br>';
}
} else{
echo "No Rows Found in Table!";
}
}
}
//پایان اتصال
$conn->close();
?>
این نمونه پرس و جو تمام ردیف ها را از جدول فرضی table در جایی که مقدار ستون فرضی col برابر با عبارت word باشد انتخاب می کند.نکته: استفاده از کاراکتر * در پرس و جو توصیه نمی شود مگر اینکه واقعا بخواهیم اطلاعات را از تمام ستون ها انتخاب کنیم، برای بهینه بودن پرس و جو بهتر است به جای کاراکتر * نام ستون های مد نظر را درج کنیم به فرض:
SELECT id, name, status FROM table WHERE name = 'word'
در ادامه آموزش هر کدام از وضعیت های بالا را بررسی می کنیم.استفاده از عملگرهای < = > در دستور WHERE
همان طور که اشاره شد عبارت WHERE در دستور SELECT تعیین کننده منظور دقیق ما در انتخاب ردیف های اطلاعات درخواستی از پایگاه داده است، مثل اینکه در کتابخانه از میان قفسه های موجود، بخش تاریخ، دسته تاریخ جهان، صرفا کتب انتشارات مد نظرمان را انتخاب کنیم، مشابه دنیای واقعی در نوشتن پرس و جوهای MySQL نیز تمام جزئیات درخواست باید با عباراتی بیان شود که این کار با پارامترهای دستور WHERE صورت می گیرد، یکی از این پارامترها عملگرهای بزرگتر، کوچکتر و مساوی (< = >) هستند، با کمک این عملگرها می توانیم از دیتابیس سایت ردیف هایی را انتخاب کنیم که به فرض سن کاربر از 25 سال بیشتر باشد، در نمونه پرس و جوی زیر از جدول فرضی users با مقایسه ستون age نام کاربرانی که سن آنها از 25 سال بیشتر است را انتخاب می کنیم:
SELECT name FROM users WHERE age > 25
در واقع عبارت بالا به این معنی است: از جدول فرضی users ستون name، تنها ردیف هایی را انتخاب کن که مقادیر سن در ستون age بزرگتر از 25 باشد.مشابه همین کار در مثال زیر این بار با علامت نا مساوی (=!) انجام شده است:
SELECT name FROM users WHERE age != 25
عبارت بالا به این معنی است: از جدول فرضی users ستون name، تنها ردیف هایی را انتخاب کن که مقادیر سن در ستون age برابر با 25 نباشد.نکته: به خاطر داشته باشیم عملگرهای بزرگتر و کوچکتر تنها در مقایسه ستون های از نوع عدد کاربرد دارند و بهتر است نوع داده ها به صورت INT (عددی) باشد، اما از علامت مساوی و نامساوی هم برای ستون های با مقدار عددی و هم برای ستون های با مقادیر رشته ای (متنی) می توانیم استفاده کنیم.
استفاده از LIKE در دستور WHERE
استفاده از عملگرهای بزرگتر، کوچکتر و مساوی در دستور WHERE به تنهایی تمام خواسته های ما را در ارتباط با اجرای پرس و جوی SELECT از پایگاه داده پوشش نمی دهد، فرض کنیم اسامی کاربران سایت جهت نمونه به صورت زیر در جدول دیتابیس ذخیره شده است:
Arash
Behdad
Behzad
Arman
Sasan
Sajad
Armin
اگر بخواهیم کاربرانی را که دو حرف اول نام آنها با حروف A و R شروع شده است را انتخاب کنیم با عملگرهایی که پیشتر گفتیم این کار ممکن نیست، این عملگرها عدد یا مقدار رشته ای را به صورت بسته و یکجا مقایسه می کنند به طور مثال با عملگر مساوی تنها می توانیم بنویسیم:SELECT id, name FROM table WHERE name = 'Arman'
این دستور فقط ردیف یا ردیف هایی را که مقادیر ستون name در آنها Arman باشد انتخاب می کند اما با استفاده از پارامتر LIKE در دستور WHERE مشکل رفع می شود، پارامتر LIKE معمولا به همراه کاراکتر % (Percent Wildcard) استفاده می شود که به معنی نادیده گرفتن ادامه یا ابتدای مقادیر مد نظر در جستجو است، در مثال زیر با کاربرد LIKE بیشتر آشنا می شویم:SELECT id, name FROM table WHERE name LIKE 'Ar%'
زمانی که پس از دو حرف Ar علامت % را قرار می دهیم در واقع به MySQL می گوییم که فقط دو حرف اول برایمان اهمیت دارد و بقیه عبارت هر چیزی می تواند باشد، دستور بالا ردیف های مربوط به اسامی زیر را به عنوان نتیجه پرس و جو انتخاب می کند:Arash
Arman
Armin
حال تصور کنیم کاربری با نام فرضی PHPArmin نیز در لیست کاربران سایت ثبت شده است، دستور بالا این کاربر را انتخاب نمی کند چرا که عبارت PHPArmin با حروف Ar شروع نشده است اما تغییر پرس و جو به صورت نمونه زیر شامل این نوع اسامی نیز خواهد شد:SELECT id, name FROM table WHERE name LIKE '%Ar%'
در واقع با افزودن یک % در ابتدا و انتهای عبارت پرس و جو، مفسر MySQL چنین برداشت می کند که تنها برایمان وجود عبارت Ar در بین نام کاربری مهم است و ابتدا یا انتهای رشته نادیده گرفته می شود، به این صورت می توان گفت:علامت % (Percent Wildcard) اگر در ابتدا قرار گیرد حروف ماقبل و اگر در انتها قرار گیرد حروف مابعد عبارت مورد پرس و جو نادیده گرفته می شود.
ذکر این نکته ضروری است که در کار با دستور LIKE و علامت % باید به بحث سرعت اجرای پرس و جوها و انتخاب حداقل ردیف ها دقت کنیم و دامنه انتخاب مقادیر را بیش از حد مورد انتظار توسعه ندهیم، برای اعداد نیز بهتر است از عملگرهای < = > به جای LIKE استفاده کنیم، در مباحث آینده در خصوص پارامتر LIMIT و اینکه چگونه تعداد ردیف های انتخاب شده را کاهش و در نتیجه سرعت اجرای پرس و جوها را افزایش دهیم بیشتر خواهیم گفت.
نکته: بعضا مشاهده می شود از LIKE به عنوان پایه کار در برنامه نویسی سیستم های جستجو استفاده می شود، یادآور می شویم اگرچه جستجو با LIKE برای دیتابیس های کم حجم نتایج مطلوبی در پی دارد اما برای پایگاه داده بزرگ، موتورهای جستجو معمولا جهت افزایش دقت و سرعت کار از سیستم ایندکس گذاری استفاده می کنند که الگوریتم های پیشرفته و مباحث جداگانه ای دارد.
دسته بندی: آموزش مقدماتی » MySQL
برچسب ها: MySQL
مطالب بیشتر:
حذف مقادیر از MySQL با دستور DELETE
انتخاب ردیف ها با دستور SELECT در MySQL
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
توابع تجمیعی (Aggregate Functions) در MySQL
حذف مقادیر از MySQL با دستور DELETE
انتخاب ردیف ها با دستور SELECT در MySQL
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
توابع تجمیعی (Aggregate Functions) در MySQL
دیدگاه
۲۹ دیدگاه برای این مطلب ارسال شده است.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
reza
۱۹:۳۶ ۱۳۹۱/۰۹/۲۲
سلام.
ببخشید من از دستور select option و از method POST استفاده کردم.
می خواستم بپرسم که چطوری می تونم با انتخاب هر کدوم از گزینه هایی که وجود داره همون لحظه مقدار دستور option را بدست بیارم.
الان با انتخاب یکی از مقادیر option و فشار دادن یک دکمه این کار رو می کنم.
ببخشید من از دستور select option و از method POST استفاده کردم.
می خواستم بپرسم که چطوری می تونم با انتخاب هر کدوم از گزینه هایی که وجود داره همون لحظه مقدار دستور option را بدست بیارم.
الان با انتخاب یکی از مقادیر option و فشار دادن یک دکمه این کار رو می کنم.
برای این گونه موارد و ارسال هم زمان اطلاعات باید از ای جکس (Ajax) و جاوا اسکریپت استفاده کنید، یک مثال:
ajax-select-option.php
در این مثال نیز از متد POST استفاده کرده ایم.
ajax-select-option.php
در این مثال نیز از متد POST استفاده کرده ایم.
ابوالفضل
۱۱:۴۱ ۱۳۹۲/۰۴/۰۵
سلام ممنون از سایت عالیتون
من در سایتم شماره تلفن همراه کاربران را دریافت می کنم می خوام در صورتی که شماره تلفن همراه کاربر ایرانسل است یک پیام نشان دهم مثلا شما از اپراتور ایرانسل استفاده می نمایید و اگر همراه اول هست یک پیام دیگر نمایش دهم مثلا شما از اپراتور همراه اول استفاده می نمایید و اگر هیچ کدام نبود پیام اپراتور تلفن همراه شما توسط ما پشتیبانی نمی شود را نمایش دهد
ممنون می شم در این زمینه منو راهنمایی بفرمایید
من در سایتم شماره تلفن همراه کاربران را دریافت می کنم می خوام در صورتی که شماره تلفن همراه کاربر ایرانسل است یک پیام نشان دهم مثلا شما از اپراتور ایرانسل استفاده می نمایید و اگر همراه اول هست یک پیام دیگر نمایش دهم مثلا شما از اپراتور همراه اول استفاده می نمایید و اگر هیچ کدام نبود پیام اپراتور تلفن همراه شما توسط ما پشتیبانی نمی شود را نمایش دهد
ممنون می شم در این زمینه منو راهنمایی بفرمایید
هرچند پاسخ به سوال شما نیازمند داشتن اطلاعات بیشتری از کدها، نوع و فرم شماره ها و اطلاعات ذخیره شده در دیتابیس است، اما با فرض شروع اعداد به صورت 0935، 0912 و... می توان از نمونه کد زیر استفاده کرد (این تنها یکی از روش ها است):
<?php
function checkOperator($num){
//حذف +98
$num = str_replace('+98', NULL, $num);
//دریافت سه رقم اول
$num_3 = substr($num, 0, 3);
//بررسی
switch($num_3){
case '935':
case '936':
case '937':
return 'ایرانسل';
break;
case '911':
case '912':
case '913':
return 'همراه اول';
break;
}
//دریافت چهار رقم اول
$num_4 = substr($num, 0, 4);
//بررسی
switch($num_4){
case '0935':
case '0936':
case '0937':
return 'ایرانسل';
break;
case '0911':
case '0912':
case '0913':
return 'همراه اول';
break;
}
return 'اپراتور پشتیانی نمی شود!';
}
echo checkOperator('+98935*******');
//echo checkOperator('0935*******');
?>
shahin
۲۰:۵۰ ۱۳۹۲/۰۴/۳۰
سلام
من یه جدول به نام test دارم میخوام فیلدهای ان را نمایش بدم به شرط انکه که فیلد کلید اصلی ان که در جدول دیگه کلید خارجی مقدارش نباشد
یعنی در جدول test فیلد idtest مقدارش در جدول it و در فیلد idtest نباشد با همچین شرطی برام نمایش داده بشن
این هم کد sql ان شرطش رو چی بزارم ممنون میشم کمکم کنید؟؟؟؟؟
من یه جدول به نام test دارم میخوام فیلدهای ان را نمایش بدم به شرط انکه که فیلد کلید اصلی ان که در جدول دیگه کلید خارجی مقدارش نباشد
یعنی در جدول test فیلد idtest مقدارش در جدول it و در فیلد idtest نباشد با همچین شرطی برام نمایش داده بشن
این هم کد sql ان شرطش رو چی بزارم ممنون میشم کمکم کنید؟؟؟؟؟
$sql="select test.idtest,test.day,test.time,test.date From test
Inner join it
On test.idtest=it.idtest
where
نیازی به تنظیم قسمت WHERE نیست، در قسمت ON به جای علامت = از =! استفاده کنید:
SELECT test.idtest, test.day, test.time, test.date
FROM test
INNER JOIN it ON test.idtest != it.idtest
راه حل استفاده از LEFT JOIN:SELECT test.idtest, test.day, test.time, test.date
FROM test
LEFT JOIN it ON test.idtest = it.idtest
WHERE it.idtest IS NULL
و همچنین راه حل معمولی:SELECT *
FROM test
WHERE NOT
EXISTS (
SELECT idtest
FROM it
WHERE test.idtest = it.idtest
)
shahin
۰۰:۱۱ ۱۳۹۲/۰۴/۳۱
ممنون جواب این سوالم و گرفتم الان اگر بخوام تمام فیلد های دو جدولم نمایش بدم چطور جدول test جدول it ؟؟؟
"select test.idtest,test.day,test.time,test.date,it.idb,it.name,it.tel,it.bime,it.idtest from test
inner join it
قاعدتا دستوراتی که در پاسخ قبل نوشتیم کاربرد خواهند داشت، کافی است در قسمت SELECT به همین صورتی که در سوال مطرح کردید، ستون های هر دو جدول را انتخاب کنید (تست نشده)، اگر راه حل درست نبود، از نمونه زیر استفاده کنید:
SELECT tbl_1.name, tbl_2.name
FROM `tbl_1`
LEFT JOIN `tbl_2` on tbl_1.id = tbl_2.id
UNION
SELECT tbl_1.name, tbl_2.name
FROM `tbl_1`
RIGHT JOIN `tbl_2` on tbl_1.id = tbl_2.id;
این کد را با توجه به پاسخ قبل می توانید ویرایش کنید.shahin
۲۲:۲۵ ۱۳۹۲/۰۴/۳۱
ببخشید من در جدول اولم فیلد idtest را به عنوان کلید اصلی تعریف کردم
و در جدول دوم این فیلد idtest را به عنوان کلید خارجی است و در جدول دوم کلید idb را کلید اصلی تعریف کردم
در محیط phpmyadmin در جدول دوم باید هر دو فیلد را به عنوان کلید در نظر بگیرم؟؟
و در جدول دوم این فیلد idtest را به عنوان کلید خارجی است و در جدول دوم کلید idb را کلید اصلی تعریف کردم
در محیط phpmyadmin در جدول دوم باید هر دو فیلد را به عنوان کلید در نظر بگیرم؟؟
خیر، تفاوتی ندارد که ستون دارای ویژگی Primary Key باشد یا خیر (کاربرد این ویژگی برای جلوگیری از ایجاد مقادیر تکراری در یک جدول است)، مهم هدف از پرس و جو و ساختار جدول است، به طور مثال زمانی لازم است که از ستون Primary Key استفاده شود، زمانی هم ممکن است از مقادیر ستون دیگر برای بررسی استفاده کنیم.
مصطفی
۰۱:۴۸ ۱۳۹۲/۰۷/۲۴
ممنون از مطبتون
چطور میشه نتیجه ی یه ستون رو از حاصل جمع دو ستون دیگه بدست اورد یعنی حاصل اون دو ستون در یک ستون دیگه قرار بگیره
چطور میشه نتیجه ی یه ستون رو از حاصل جمع دو ستون دیگه بدست اورد یعنی حاصل اون دو ستون در یک ستون دیگه قرار بگیره
انجام این کار به راحتی امکانپذیر است، نمونه کد:
UPDATE `table_name` SET col_3 = col_1 + col_2
خلیل
۱۴:۰۵ ۱۳۹۲/۰۷/۳۰
ممنون از راهنمایی هایی که می کنین و مطالبتون استاد .
مجید
۱۰:۰۳ ۱۳۹۲/۰۸/۳۰
سلام من می خوام در پایگاه داده چنین شرطی تعریف کنم ولی نمی دونم چطور باید بنویسم مثلا اگه مقدار x در جدول a مساوی با 1 بود مقدار y در جدول b برابر 2 شود و یه سوال دیگه اینکه چطور می تونیم به شرط های تعریف شده دسترسی داشته باشیم یا تغییرشون بدیم. ممنون
در مورد قسمت اول سوال، می توانید از نمونه پرس و جوی زیر استفاده کنید:
UPDATE tbl_1 INNER JOIN tbl_2 ON tbl_1.id = tbl_2.id SET tbl_1.col_1 = '2' WHERE tbl_2.col_1 = '1'
اما در مورد بخش دوم؛ منظورتان از دسترسی مشخص نیست، برای تغییر هم باید با نحوه نوشتن پرس و جوهای ترکیبی با JOIN و مشتقات آن در MySQL آشنا باشید.مجید
۰۳:۰۱ ۱۳۹۲/۰۹/۰۵
اقا ممنون خیلی به کارم اومد فقط یه مشکل کوچیک داشتم اگه این شرط مربوط به یک جدول باشه چطور باید نوشت مثلا اگر مقدار x در جدول a برابر 1 باشه مقدار y در همان جدول برابره با 2 قرار بگیره. باز هم ممنون
می توانید از پارامتر WHERE استفاده کنید، نمونه:
UPDATE tbl SET col_1 = '2' WHERE col_2 = '1'
مجید
۱۳:۱۴ ۱۳۹۲/۰۹/۰۷
ببخشید منظورم برا زمانی هست که ما یه شرط تعریف کردیم و یه جدول داریم با id های مختلف حالا می خوایم اون شرط روی تمام این id ها در صورت برقرار بودن اجرا بشه برای مثال اگه مقدار x برای id مشخص برابر 1 بود مقدار y برای همان id برابر 2 قرار بگیره و این عمل برای تمام id های موجود در جدول صورت بگیره
برای این حالت بهتر است یک پرس و جو با دستور SELECT در ابتدا اجرا، سپس در حلقه while دستور UPDATE را مطابق با نیازتان تعریف نمائید.
مجید
۱۶:۱۳ ۱۳۹۳/۰۱/۲۰
سلام من از این روش برای طی کردن تمام سطرهای جدول استفاده می کنم اگه ایرادی داره یا روش ساده تری وجود داره لطفا بگید من مطمئن نیستم
begin
declare i,min,max int;
set min=0;
set max=1;
select count(user) from table into i;
while i>=max do
//mycode
set min=min+1;
set max=max+1;
end while;
end
دوست گرامی آموزش در رابطه با MySQL است، اما کدهای شما ظاهرا مربوط به دیتابیس Oracle Java است!
لطفا به وبسایت های مرتبط مراجعه کنید.
لطفا به وبسایت های مرتبط مراجعه کنید.
حسین
۲۳:۱۱ ۱۳۹۳/۰۲/۱۱
سلام. ممنون از سایت خوبتون.سوالی داشتم.
من اطلاعاتی رو در بانک اطلاعاتی به این صورت ذخیره می کنم:
این برنامه، بصورت امیتازدهی ستاره ای هست و مثلا یک نفر 5 رو میده یا یه نفر 3. میخوام همه اینا رو جمع کنم.
واقعا لطفا دارید. کمکم می کنید؟؟؟
من اطلاعاتی رو در بانک اطلاعاتی به این صورت ذخیره می کنم:
INSERT INTO rating VALUES('','".$uid."','".$page."','".$vote."','".$stars."','".$ip."',NULL)")
حالا میخوام با انتخاب آدرس صفحه، تمام اطلاعاتی رو که از این صفحه در متغیر vote (امتیاز کاربر) ذخیره شده رو جمع کنم.این برنامه، بصورت امیتازدهی ستاره ای هست و مثلا یک نفر 5 رو میده یا یه نفر 3. میخوام همه اینا رو جمع کنم.
واقعا لطفا دارید. کمکم می کنید؟؟؟
دقیقا متوجه سوالتان نشدیم! اما به نظر با نوشتن یک دستور SELECT و انتخاب ستون vote می توانید در یک حلقه while با علامت =+ متغیر را با مقدار هر ستون در هر دور افزایش دهید تا در نهایت مقدار کل بدست بیاید.
سامان
۱۶:۲۲ ۱۳۹۳/۰۶/۱۷
سلام
ایا اولویت شرط ها در بخش where تاثیری بر سرعت داره؟ برای مثال من در بخش where از 3 شرط استفاده کردم شرط اول 100 سطر رو انتخاب میکنه و شرط دوم از بین این 100 تا 40 تا رو انتخاب میکنه و شرط سوم از بین این 40 تا 10 تا رو انتخاب میکنه در صورتی که اگه شرط ها رو برعکس میذاشتم ممکن بود اول 600 سطر رو انتخاب کنه و بعد 300 سطر و بعد 10 سطر مورد نظر. ایا روش اول سریعتر از روش دومه؟
ایا اولویت شرط ها در بخش where تاثیری بر سرعت داره؟ برای مثال من در بخش where از 3 شرط استفاده کردم شرط اول 100 سطر رو انتخاب میکنه و شرط دوم از بین این 100 تا 40 تا رو انتخاب میکنه و شرط سوم از بین این 40 تا 10 تا رو انتخاب میکنه در صورتی که اگه شرط ها رو برعکس میذاشتم ممکن بود اول 600 سطر رو انتخاب کنه و بعد 300 سطر و بعد 10 سطر مورد نظر. ایا روش اول سریعتر از روش دومه؟
سرعت اجرای پرس و جو در شرایطی می تواند ارتباط به پس و پیش بودن شرط ها داشته باشد، به طور مثال زمانی که از OR بین آنها استفاده شده باشد و در نهایت تعداد کل ردیف های انتخاب شده (دقت کنید: ردیف ها زمانی انتخاب می شوند که شرط برقرار باشد) در پایان اجرای پرس و جو مهم است.
نکته: سرعت پردازش دستورات به موارد دیگری (از جمله تعداد و حجم کاراکتر، نوع ستون داده ها و...) نیز بستگی دارد.
نکته: سرعت پردازش دستورات به موارد دیگری (از جمله تعداد و حجم کاراکتر، نوع ستون داده ها و...) نیز بستگی دارد.
رضا اخلاقی
۱۸:۲۹ ۱۳۹۳/۰۹/۰۴
با سلام و عرض ادب
سوالی در رابطه با این موضوع داشتم.
چگونه می توان از WHERE استفاده نمود زمانی که اطلاعات دیتابیس با حروف فارسی ذخیره شده است برای حروف انگلیسی مشکلی ندارم.
با تشکر
سوالی در رابطه با این موضوع داشتم.
چگونه می توان از WHERE استفاده نمود زمانی که اطلاعات دیتابیس با حروف فارسی ذخیره شده است برای حروف انگلیسی مشکلی ندارم.
با تشکر
دستور WHERE به خودی خود فرقی بین زبان انگلیسی و فارسی ندارد! باید سایر مواردی که جهت کار با اطلاعات زبان فارسی نیاز است رعایت کنید، در مجموع برای اینکه مشکلی از لحاظ ذخیره و نمایش حروف فارسی در دیتابیس نداشته باشید باید تمام مراحل زیر را به صورت صحیح انجام دهید:
در درجه اول باید Server Connection Collation دیتابیس را
- از متاتگ زیر در تمام صفحات استفاده کنید:
- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
در درجه اول باید Server Connection Collation دیتابیس را
utf8_persian_ci
انتخاب کنید، سپس مراحل زیر را انجام دهید:- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکدutf8_persian_ci
بسازید.- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
mysqli_query($conn, "SET NAMES 'utf8' ");
- اگر مشکل همچنان حل نشد، فایل های خود را با ویرایشگر ++Notepad باز کرده و سپس از قسمت Encoding گزینه Encoding UTF-8 without BOM را انتخاب و فایل خود را مجددا ذخیره نمائید.هادی
۱۷:۴۴ ۱۳۹۵/۰۱/۱۸
سلام به ادمین عزیز و کاربران سایت
دوتا سوال برام پیش اومده :
1- یک جدول داریم که بطور مثال فیلدهای userId , productId , userStatus , productStatus رو داره. میشه در این کوئری
2- یک جدول فروش داریم که ممکنه هر نوع محصول به چند نفر فروخته شده باشه و می خواهیم به ترتیب 10 محصول پرفروش را انتخاب کنیم کوئری اون به چه صورتی هست؟ لطفا یک روش بهینه ارائه کنید.
ممنون از سایت خوبتون
دوتا سوال برام پیش اومده :
1- یک جدول داریم که بطور مثال فیلدهای userId , productId , userStatus , productStatus رو داره. میشه در این کوئری
select count(userId),count(productId) from tblTest where
چطور دوتا شرط بنویسیم که برای count(userId) چک کنه userStatus!=0 و برای count(productId) مقدار productStatus!=0 رو چک کنه؟2- یک جدول فروش داریم که ممکنه هر نوع محصول به چند نفر فروخته شده باشه و می خواهیم به ترتیب 10 محصول پرفروش را انتخاب کنیم کوئری اون به چه صورتی هست؟ لطفا یک روش بهینه ارائه کنید.
ممنون از سایت خوبتون
برای سوال اول و نوشتن دو شرط در یک کوئری می توانید به شیوه نمونه زیر عمل کنید:
SELECT COUNT(userId) AS count FROM tbl WHERE userStatus != 0
UNION ALL
SELECT COUNT(productId) AS count FROM tbl WHERE productStatus != 0
در مورد بخش دوم سوال، ساختار دیتابیس شما مشخص نیست، با این حال با فرض اینکه id هر محصول در لیست فروش وجود داشته باشد، می توانید با دستور SELECT و GROUP BY و هچنین ASC و DESC این کار را انجام دهید، مثال:SELECT id, COUNT(id) AS id_occurrence FROM tbl GROUP BY id ORDER BY id_occurrence DESC LIMIT 10
آخرین دیدگاه ها
برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
مجتبی
سلام وقت بخیر میخوام یک روز به تاریخ دریافتی اضافه شه ممنون میشم راهنمایی کنید۱۴۰۳/۰۶/۲۰
پرتو
سلام خوبید؟ خسته نباشیذ ببخشید مزاحم شدم می خواستم بگم من به شما ایمیل زدم ولی هنوز شما جواب ندادین می تونم بپرسم چرا سوال...۱۴۰۳/۰۶/۱۵
سیدعباسی
با سلام ببخشید یه سوال دیگه هم دارم من با این تابع فقط یه دونه کانال رو می تونم خروجی بگیرم میخوام توی...۱۴۰۳/۰۵/۰۶
سیدعباسی
با تشکر از شما مشکلم اینکه چطوری عکس پست آخر رو بدست بیارم و بعد با الگوی که اونو نوشتید استخراجش کنم سورس...۱۴۰۳/۰۵/۰۵
سیدعباسی
با سلام من مشکل قبلیم رو که گفتم ارور میده رو حل کردم مشکل بعدیم اینکه با استفاده از این کد با تشکر...۱۴۰۳/۰۵/۰۳
سیدعباسی
با سلام این کد رو چند روز پیش برام فرستادید و کارم رو راه انداخت با این میشه عکس ها رو استخراج کرد...۱۴۰۳/۰۵/۰۱
پرتو
سلام جناب خوبید؟ چیزی شده جواب نمیدین؟ آخه من ایمیل دادمممم ممنون میشم چک کنید لطفا۱۴۰۳/۰۴/۳۱
در انتظار بررسی: ۰
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.