PDA

View Full Version : سوال: Fetch نشدن اطلاعات تکراری در هر رکورد mysql



shokouhi72
سه شنبه 10 آذر 1394, 17:20 عصر
با سلام و خسته نباشید خدمت برنامه نویسان
من یه بخشی دارم که نمیخواهم رکورد های تکراری fetch نشن ، چطور میتونم اینکار بکنم مثلا من ایدی های تکراری دارم و میخوام فقط یه بار از هر نوع نمایش داده شود چطور میتونم اینکار بکنم ممنون

مهرداد سیف زاده
سه شنبه 10 آذر 1394, 20:42 عصر
وقتی مثلا ۱۰ ردیف fetch کردی حالا id اون ها رو در کوکی یا session ذخیره کن. دفعه بعد داری query میزنی اون ها رو ignore کن مثال زیر رو نگاه کنید
بار اول که کوئری میزنید


$row = "select * from table where name='test' limit 10";
$ids = array();
foreach ($row as $key => $value) {
echo $value['title'];


array_push($ids, $value['id']);
}
setcookie('ids_save',implode(',', $ids));


و حالا دفعات بعد در query باید بگید که شامل این idها نباشه


$old_ids = $_COOKIE['ids_save'];
$sql = "selet * from table where name='test2' and id not in($old_ids)";

Unique
چهارشنبه 11 آذر 1394, 01:45 صبح
نمیدونم چرا آقا مهرداد سختش کردن اما میتونی از DISTINCT توی query استفاده کنی. یا کلا یک query بنویسی و ID های تکراری را پاک کنی ! بعدش چرا باید ID تکراری داشته باشی ؟ معمولا فیلد ID باید یکتا باشه.

مهرداد سیف زاده
چهارشنبه 11 آذر 1394, 06:40 صبح
نمیدونم چرا آقا مهرداد سختش کردن اما میتونی از DISTINCT توی query استفاده کنی. یا کلا یک query بنویسی و ID های تکراری را پاک کنی ! بعدش چرا باید ID تکراری داشته باشی ؟ معمولا فیلد ID باید یکتا باشه.
البته سوال هم نگفته که join زدم و داده های تکراری میاد. منم با این دید رفتم که شاید داره به صورت تصادفی یه تعداد داده از دیتابیس میگیره که توی query بعدی این idها نباید بیاد.
حالا خودشون بیان ببینن کدوم مد نظرشون هست

Unique
چهارشنبه 11 آذر 1394, 15:12 عصر
البته سوال هم نگفته که join زدم و داده های تکراری میاد.
DISTINCT ربطی به join نداره ها !



صورت تصادفی یه تعداد داده از دیتابیس میگیره
جایی اشاره نکرده تصادفی اگه هم تصادفی بگیره باز هم با DISTINCT میشه راحتتر توی Query مانع از تکراری ها شد.

اصل مشکل اینجاست اصلا چرا ID تکراری ! مهم اینه اگه کسی این تاپیک را بخونه در آینده فکر نکنه ID تکراری موضوع عادی و روالی هستش !

us1234
چهارشنبه 11 آذر 1394, 21:06 عصر
فکر میکنم منظور استارتر از آیدی یه چیز مثل ایمیل یا ... باشه و کاری به Id سطر در دیتابیس نداره

بهترین راه حل همان استفاده از DISTINCT است .

select * , DISTINCT Id from table where 1

راه حلی که در پست شماره 2 گفته شد هم بدترین روش و غیر اصولی ترین روش کار با دیتا های داخل دیتابیس است .
SQL یک زبان خیلی پیشرفته است و فقط سلکت نداریم ، داخل کوئری انواع شرط ها ، تغییر تایپ ، سرچ ، هش ها ( مثل md5 ، sha1 یا ... ) ، سویچ کیس ها و ... قابل پیاده سازی است .

استفاده از کوکی برای ذخیره ID را هم کلا چشم پوشی میکنم :) ، اگر این کوئری با یک مرورگر بدون کوکی اجرا شده بود نتیجه چی میشد ؟ مثلا با CURL کسی اجراش میکرد :)

shokouhi72
پنج شنبه 12 آذر 1394, 15:00 عصر
اساتید دمتون گرم
هر دو تا روش جواب میده البته من از distinct استفاده کردم :

$sql = "select distinct price.*,pricecategories.* from price,pricecategories where price.idcategory = pricecategories.ID group by price.idcategory order by price.ID desc";


خیلی ممنونم از توجه و پاسختوون