PDA

View Full Version : سوال: جستجو



sadegh.te
چهارشنبه 17 دی 1393, 11:27 صبح
سلام دوستان گرامی من چطور میتونم یه کوئری SQL بنویسم که مقادیری رو که در عکس میبینید رو بتونم باهاش جستجو کنم؟ ممنون میشم راهنمایی کنید

127343

nasr
چهارشنبه 17 دی 1393, 11:36 صبح
باید با دستور if اول ببینی چه پارامترهایی انتخاب شده اند بعد بر اساس اون پارامترها Query را بنویسی
البته احتمال داره یه کم درد سر داشته باشه اگه دو حالت انتخاب داشته باشی مثلا هم مقاوم در برابر آب و هم مقاوم در برابر ضربه انتخاب شده باشه.

یه چیزی شبیه به این http://timershop.ir/

sadegh.te
چهارشنبه 17 دی 1393, 11:48 صبح
آخه اگه من بخوام واسه هر کدوم یه شرط بزارم میدونی چقد حجم کد نویسی بالا میره!!! اوجوری باید برای هر حالت حدود 10 تا شرط بزارم که کار اشتباهیه به هر حال ممنون از پاسختون

sadegh.te
چهارشنبه 17 دی 1393, 23:32 عصر
دوستان کسی نظری نداره؟

پیام حیاتی
چهارشنبه 17 دی 1393, 23:38 عصر
سلام
صادق جان فکر می کنم اگر در انجمن SQL مطرح کنی زودتر به نتیجه برسی.

بیتا حکمت
پنج شنبه 18 دی 1393, 00:42 صبح
اینی که میگم سواله آ

اگر کوئری شما یک رشته public باشه ، اگر چک باس تیک خورد به این رشته سراسری قسمت دیگری کوئری اضافه بشه ، اگر چک باس تیک هم نخورد اتفاقی نمی افته ، چه مشکلی پیش میاد ؟
یا اینکه این روش علمی نیست ؟

aminmousavi
پنج شنبه 18 دی 1393, 00:53 صبح
سلام دوست عزیز . اطلاعات جداول و فیلد هاشو بدین تا بشه کمکتون کرد

sadegh.te
پنج شنبه 18 دی 1393, 01:13 صبح
سلام دوست عزیز . اطلاعات جداول و فیلد هاشو بدین تا بشه کمکتون کرد

سلام امین جان مشکل من هم دقیقا همینه که فیلد مشخصی ندارم مثلا این تصویری رو که گذاشتم فیلتر جستجو برای قسمت موبایل هستش ولی اگه کاربر بره تو قسمت تبلت فیلتر جستجوش با این فرق داره مثلا ما تو

قسمت تبلت جستجو بر اساس اینچ صفحه داریم و در این شکی نیست که قطعا فیلدهاش با قسمت موبایل فرق داره . ولی الان مشکل من اینه که چطور یه شرط بزارم که وقتی کسی چک اندروید رو true میکنه محصولات

اندروید رو نمایش بده و یا مثلا وقتی که کسی چک اندروید و چک مقاوم در برابر ضربه و چک یک سیمکارت رو باهم true میکنه بره جستجو کنه و محصولی رو بیاره که هم اندروید باشه و هم ضد ضربه باشه و هم تک سیم

باشه.

من خودم براش یه کوئری نوشتم و تا دو مرحله بیشتر جواب نمیده یعنی فقط میتونی بر اساس دو مقدار جستجو کنی. کدشم گذاشتم. اگه چیزه دیگه لازمه بگید که بزارم ممنون.


if (a && col3ls || io && col3ls || a && col3a || col3ls && col3a) {
var cond = "and";
}
else {
cond = "or";
}
if (os !== "") {
filterdProducts = alasql('SELECT * FROM ? WHERE os LIKE "%' + a + '%" ' + cond + ' ls LIKE "%' + col3ls + '%" or os LIKE "%' + io + '%" ' + cond + ' ls LIKE "%' + col3ls + '%"
or ls LIKE "%' + col3ls + '%"' + cond + ' sim LIKE "%' + col3a + '%"', [products]);
}

aminmousavi
پنج شنبه 18 دی 1393, 01:34 صبح
خوب صادق همین کوئری که مینوسید نسبت به فیلد های جدول sql هست دیگه ، کلا برای هر نوع محصول (موبایل ، تبلت ، لپ تاپ و ... ) یک جدول درست کردی ؟
مثلا برای موبایل فقط یک جدول داری ؟
اطلاعات جداولی که ساختی رو بزار که برات بتونم کوئری بنویسم .

sadegh.te
پنج شنبه 18 دی 1393, 10:36 صبح
سلام باشه

موبایل => os , properties , sim , network

تبلت => os , inch , sim

لپ تاپ => type , RAM

دوربین => type , toch , rozloshen

این فیلدها هستند که قراره بر روی آنها جستجو انجام بشه.

aminmousavi
پنج شنبه 18 دی 1393, 15:30 عصر
برات برای os و properties رو نوشتم ، اما در کل طراحی دیتابیست اصولی نیست ، خیلی دست و پا بسته هست ، به عبارتی خیلی استاتیکه و هرچی استاتیک تر باشه حجم کد نویسیت هم بیشتره ( نسبت به بزرگ شدن قابلیت هات) ، به ساده ترین و بهینه ترین روشی که الان به ذهنم رسید برات نوشتم :

protected void Button1_Click(object sender, EventArgs e)
{
List<string> itemConditonSecionOS = new List<string>();
List<string> itemConditonSecionProperties = new List<string>();
string query = " SELECT * FROM Mobile ";
if (chkOSAndroid.Checked)
{
itemConditonSecionOS.Add("os='android'");
}
if (chkOSIOS.Checked)
{
itemConditonSecionOS.Add("os='ios'");
}
if (chkOSOther.Checked)
{
itemConditonSecionOS.Add("os='other'");
}
if (chkOSWindowsPhone.Checked)
{
itemConditonSecionOS.Add("os='windowsphone'");
}


if (chkPropertiesZedeAb.Checked)
{
itemConditonSecionProperties.Add("properties='zedeab'");
}
if (chkPropertiesZedeZarbe.Checked)
{
itemConditonSecionProperties.Add("properties='zedezarbe'");
}
if (chkPropertiesForWoman.Checked)
{
itemConditonSecionProperties.Add("properties='for_woman'");
}
if (chkPropertiesForAkasi.Checked)
{
itemConditonSecionProperties.Add("properties='for_akasi'");
}


List<string> section = new List<string>();
MakeSection(itemConditonSecionProperties, ref section);
MakeSection(itemConditonSecionOS, ref section);


if (section.Count > 0)
{
query += " WHERE ";
for (int i = 0; i < section.Count; i++)
{
if (i > 0)
{
query += " AND ";
}
query += section[i];
}
}
resut.InnerText = query;
}


private void MakeSection(List<string> section,ref List<string> result)
{
string res = "";
if (section.Count > 0)
{
res = " (";
for (int i = 0; i < section.Count; i++)
{
if (i > 0)
{
res += " OR ";
}
res += section[i].ToString();
}
res += " ) ";
result.Add(res);
}
}

sadegh.te
پنج شنبه 18 دی 1393, 16:17 عصر
ممنون امین عزیز ولی اگه من بخوام اینجوری طراحیش کنم که خیلی حجم کد نویسیم بالا میره . من با جی کوئری درستش کردم و مقادری رو که از بانک میخونم میریزم و داخل آرایه و با Tsql سرچ را رو آرایه انجام میدم و و با جی کوئری زمانی که هر کدوم چکباکس ها True بشه مقدارش رو میگیرم و میرزم داخل یه متغیر و او متغیر رو میزارم داخل کوئری sql . حالا من یه روشی میخوام که فقط یه شرط بزارم که هر کدام از متغیر ها پر شد مقدارش رو بزاره داخل کوئری.

//چهار متغیر اول برای قسمت سیستم عامل
col1a = os.match("a");
col1b = os.match("io");
col1c = os.match("wp");
col1d = os.match("o");
//چهار متغیر دوم برای قسمت ویژگیهای خاص
col2a = os.match("wr");
col2b = os.match("an");
col2c = os.match("ls");
col2c = os.match("sp");
//سه متغیر سوم برای قسمت تعداد سیم کارت
col3a = os.match("w");
col3b = os.match("t");
col3c = os.match("tr");
//سه متغیر چهارم برای قسمت باند شبکه
col4a = os.match("2g");
col4b = os.match("3g");
col4c = os.match("4g");
//شرط برای شناسایی مقادیر
if (a == "a" || io == "ios" || o == "other" || w == "win_phone" || col3wr == "wr" || col3ak=="ak" || col3ls=="ls" || col3sp == "sp") {
// در داخل کوئری AND یا OR شرط برای گذاشتن مقدار
if (a && col3ls || io && col3ls || a && col3a || col3ls && col3a) {
var cond = "and";
}
else {
cond = "or";
}
// شرط برای فهمیدن تیک خوردن هر کدام از چکباکس ها
if (os !== "") {
//کوئری برای جستجو داخل آرایه
filterdProducts = alasql('SELECT * FROM ? WHERE os LIKE "%' + a + '%" ' + cond + ' ls LIKE "%' + col3ls + '%"
or os LIKE "%' + io + '%" ' + cond + ' ls LIKE "%' + col3ls + '%" or ls LIKE "%' + col3ls + '%"' + cond + ' sim LIKE "%' + col3a + '%"', [products]);
}

حالا من میخوام یه شرط یا کوئری بزارم که این مقا دیر رو بگیره و جستجو رو انجام بده این شرطی که من گذاشتم فقط تا دو مرحله رو انجام میده؟