مشکل در ایجاد یک Query

amir_s

Active Member
سلام
در ساخت یک query مشکل داشتم که براتون میگم ...

من تو MySQL دو تا Table دارم ... با نام های Users و Config
من می خوام با استفاده از SELECT بیام و یه سری از کاربر ها رو از users انتخاب کنم ... ولی باید مقدار فیلد credit اون ها کمتر از یه مقدار خاص باشه ...
حالا این مقدار خاص : این مقدار از ضرب "یه عدد که از فیلد num_of_need در همون رکورد بدست میاد" ، در یه مقدار از جدول config بدست میاد .
در جدول config من سه مقدار دارم ... p1_price و p2_price و p3_price ... این ها با توجه به عددی که داخل فایل position در جدول users هست انتخاب میشن ...
حالا میخوام اگر مثلا position طرف 2 بود ، بیاد و حساب کنه که اگر num_of_need اون ضرب در p2_price در جدول config بیشتر از credit اون بود ، اون رو select کنم ...
می خواستم اگر بشه حد اکثر در 2 query این کار انجام بشه .

یک مقدار تا مفهموم توضیح دادم ... ببخشید اگر زیاد نوشتم ...
اگر جاییش مبهمه بگید بیشتر توضیح بدم ....
ممنون از شماییه که می خونید و جواب میدید .
 
آخرین ویرایش:

amir_s

Active Member
دوستان اگر زودتر جواب بدن ممنون میشم .
اگر نامفهومه بگید تا واضح تر بگم .
 

amir_s

Active Member
در جدول users یک فیلد هست به اسم position که میشه 4 تا مقدار در اون قرار داد ... از عدد 1 تا 4
در جدول config هم 4 فیلد هست به اسم های p1_price و p2_price و p3_price و p4_price که هر کدوم دارای یک عدد هستن .. این عدد ها قیمت یک کالا برای افراد با position های مختلفه .
همچنین در جدول users ، دو فیلد دیگه هست . credit که اعتبار کاربره و num_of_need که تعداد درخواستی کالا برای اون کاربره .
من می خوام توسط یک query ، کاربرایی رو select کنم که اعتبار برای خرید کالاشون تموم شده باشه ( یا بر عکس )
یعنی اعتبارشون کمتر از مقداری باشه که از ضرب " num_of_need " در قیمت کالا ( که توسط position مشخص میشه ) باشه ...

یه چیز دیگه ... من مقادیر فیلد های p1_praice تا p2_price رو قبلا در متغیر هایی با همین نام در اسکریپت Php ذخیره کردم ، منظورم اینه که دیگه برای این مقادیر احتیاجی به query دوباره نیست .

امیدوارم دیگه نا مفهوم نباشه !
 

Salman_MP

Member
اگه درست فهمیده باشم:
جدول config فقط یک ردیف داره که 4 تا مقدار مختلف توشه !
اگه غلط فهمیدم معذرت! اگر هم درسته پیشنهاد می کنم اگه می تونی طراحی دیتابیست رو عوض کنی ....
(کدم هیچ اعتباری نداره چون توی notepad تایپش کردم.)
این کار رو می کنیم:
PHP:
$sql = "SELECT * FROM users as U, config as C WHERE (U.position=1 AND U.credit<U.num_of_need*C.p1_price) OR (U.position=2 AND 

U.credit<U.num_of_need*C.p2_price) OR (U.position=3 AND U.credit<U.num_of_need*C.p3_price) OR (U.position=4 AND 

U.credit<U.num_of_need*C.p4_price)";

یا این یکی که خیلی هم خوشگل تره ! به خوندنش می ارزه. یه نگاهی بکن.
PHP:
// $cnn = connection to database ;
$sql = "SELECT * FROM users";
$res = mysql_query($sql , $cnn);
while ($row = mysql_fetch_array($res))
{
	$num = $row["position"];
	$str_price = "";
	eval("$str_price = \"p$num_price\";");
	$price = $$str_price;
	$sql = "SELECT * FROM users as U, config as C WHERE U.UID=".$row["UID"]." AND U.credit<$price*U.num_of_need" ;
	$result = mysql_query($sql, $cnn);
	//if $result not empty
		//DO SOMTHING HERE
}
 
آخرین ویرایش:

amir_s

Active Member
بله ممنونم .
درسته ... جدول config فقط یک record داره . می گید به چه صورتی تغییرش بدم !؟
از کدی که دادید ممنونم . کار کرد ... عالی ... فقط من موندم ! من قبلا از or که استفاده میکردم MySQL خطا می گرفت ....
در رابطه با کد دوم : من هم قبلا از همین روش استفاده می کردم ولی خوب ... مشکلی که داره اینه که یه مقدار کند می کنه برنامه رو ...


بسیار سپاسگذارم .
 
آخرین ویرایش:

Salman_MP

Member
اگر جدول config یک کلید ( مثلاً PID) داشته باشه خیلی کمک می کنه. یعنی اینجوری.
کد:
CREATE TABLE config (PID integer unique, name varchar(32), value integer)
بعدش به جای position توی users یه کلید خارجی میذاری به config.PID .
جدول config هم فقط چهار تا ردیف داره که اینها هستن:
کد:
PID     name           value
1      price1         10215
2      price2         34515
3      price3       520215
4      price4       360215
 

spsgorgan

Active Member
داشتن يك كليد مشترك بين دو جدول خيلي كمك ميكنه
كاري كه آقا سلمان گفت كاملا درسته
 

جدیدترین ارسال ها

بالا