رفتن به مطلب

چگونه به این ستون از دیتابیس دسترسی پیدا کنم


پست های پیشنهاد شده

سلام

یه دیتابیس دارم که یه ستونش محتواش مثل اینه (1 2 3 , 4 5 6 , 7 8 9) و من نمیتونم اعداد داخلشون رو به صورت تک تک فرابخونمش و بعد آپدیتش کنم

مثال : نام دیتابیس mydb

تیبل : mytable

توی این تیبل رکورد های زیادی داریم که با ای دی میخونیمش مثلا از رکوردی با id =20

هر آی دی هم ستون های زیادی داره و اینجا ستون مثلا mycol رو میخوایم

اما مشکل اصلیم این جاست داده های ستون "mycol" مثلا به صورت زیر هست :

1 2 3 , 4 5 6 , 7 8 9

یعنی اعداد فوق به صورت یکجا ( با فاصله و کاما) توی فقط ستون mycol از رکوردی با آی دی 20 که در تیبل mytable و در دیتابیس mydb قرار گرفتند.

به طور خلاصه : من چطور میتونم مثلا عدد های 5 یا 4 رو فرابخونم که بعد آپدیتشون کنم به یه عدد دیگه ای مثلا 5 رو بگیرم و به 0 آپدیت کنم

یعنی خروجی بشه این :

1 2 3 , 4 0 6 , 7 8 9

60525318616046058944.png

ویرایش شده توسط sos
لینک به ارسال

خب شما اول مقدار ستون mycol رو میگیرید

select mycol from mydb where id=20

بعد مقادیری رو که نیاز دارید تغییر میدی مثلا

$mycol = str_replace('5','3',$mycol);

و در نهایت اون سطر رو بروز میکنید

update mydb set mycol='$mycol' where id=20

لینک به ارسال

خب شما اول مقدار ستون mycol رو میگیرید

select mycol from mydb where id=20

بعد مقادیری رو که نیاز دارید تغییر میدی مثلا

$mycol = str_replace('5','3',$mycol);

و در نهایت اون سطر رو بروز میکنید

update mydb set mycol='$mycol' where id=20

واقعا ممنونم اما یه سوال اگر مثلا چندتا 5 توی این ستون داشته باشیم اون وقت همه رو تغییر میده ؟ اگر این طوری باشه مشکل سازه و به نظرم اگر یه شرط دیگه اضاف بشه که معین کنه کدوم جایگاه تغییر کنه ممنون میشم . مثلا این باشه :


1 0 5,2 5 25, 8 5 5

عددا 3 تا 3 تا با کاما جدا شدن و هر سه عدد هم مستقل هستند .

لینک به ارسال

برای این کار اگه مکان اون عددی که باید عوض بشه رو میدونید ،میتونین با استفاده از تابع substr_replace این کارو انجام بدین

مقدار پارامتر length میگه چه تعداد کاراکتر رو جابجا کنه که شما میتونین 1 قرار بدید


substr_replace([i]string,replacement,start,length[/i])
http://www.w3schools.com/php/func_string_substr_replace.asp

لینک به ارسال

برای این کار اگه مکان اون عددی که باید عوض بشه رو میدونید ،میتونین با استفاده از تابع substr_replace این کارو انجام بدین

مقدار پارامتر length میگه چه تعداد کاراکتر رو جابجا کنه که شما میتونین 1 قرار بدید


substr_replace([i]string,replacement,start,length[/i])
http://www.w3schools.com/php/func_string_substr_replace.asp

آیا راه دیگه ای نیست که بشه جایگاه هر یک از این اعداد رو تعیین کنیم چون شمارش کاراکتر و جایگزینی وقتی اعداد دورقمی میشن دردسر سازه.

آیا تابعی نیست که بتونه مثل ماتریس درآیه ها رو فرابخونه چون فاصله و کاما مشخصه .

اصلا یه سوال دیگه به این نوع ورودی چی میگن یعنی این ورودی های یک ماتریس 3در3 هستند یا اصلا چی هستند آخه من نفهمیدم چی هستند 3 تا عدد که با فاصله از هم جدا و هر سه تایی با کاما جدا میشن .


1 0 5,2 5 25, 8 5 5

لینک به ارسال

اصلا یه راه حل دیگه به ذهنم رسید ببنید آیا با منطق php جور درمیاد و میشه نوشتش یا نه ؟

ما بیام این داده های رو به ماتریس تبدیل کنیم اون وقت دیگه راحت میشه تک تک فراخوندشون .

من به توابع php آشنایی ندارم شاید الگوریتمم نشدنی باشه اما گفتم بگم نظر دوستان رو هم بدونم .

یه تابع بیاد کل "

1 0 5,2 5 25, 8 5 5

" رو بخونه و بعد یه حلقه ی تکرار به اندازه ی تعداد کاراکتر های این عبارت تعیین کنیم وتوش یه شرط و یک ماتریس 3*3 بزاریم که از کاراکتر اول شروع کنه به خوندن اگر کاراکتر اول عدد بود بزاره توی درایه ی اول ماتریس بعد کاراکتر دوم روبخونه اگر باز عدد بود عدد قبلی رو در 10 ضرب کنه و با این عدد کاراکتر دوم جمع کنه و توی درایه ی اول ماتریس قرار بده اما اگر عدد نبود و فاصله بود بره کاراکتر سوم رو چک کنه و عددش رو برداره بیاره بزاره توی درآیه ی دوم وقتی به کاما رسید بره سطر بعدی .

خداییش خودمم موندم چیکار کنم تا بتونم اعداد این ستون رو تک تک صدا کنم .

ویرایش شده توسط sos
لینک به ارسال

با کد زیر من تونستم کاما ها رو جدا کنم اما هنوز نتونستم بقیش رو بنویسم

محتوای ستون از نوع string هست


<?php
$ingredientsStr = "1 0 5,2 5 25, 8 5 5";
$ingredientsArr = explode(",", $ingredientsStr);
foreach ($ingredientsArr as $i) {
print $i . "<br>";
}
?>

خروجی :


1 0 5
2 5 25
8 5 5

اما بقیش رو هنوز نمیدونم که چطور خروجی فوق رو تبدیل به یک ماتریس 3*3 کنم

ویرایش شده توسط sos
لینک به ارسال

با کد زیر تبدیل میشه به ماتریس

$ingredientsStr = "1 0 5,2 5 25, 8 5 5";
$ingredientsArr = explode(",", $ingredientsStr);
$ret = array();
foreach ($ingredientsArr as $i) {
$ret[] = explode(' ',$i);
}

var_dump($ret);

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...