ورود

View Full Version : راهنمایی برای نوشتن یک کوئری



mojdeh9000
دوشنبه 03 شهریور 1393, 21:20 عصر
سلام دوستان
من یه جدول دارم که دارای ستون ,name,position است،حالا میخوام یه کوئری بنویسم که اگه name like '%name%' and position=0 این سطر وسطر بعدیش رو بدون توجه به این شرط(بدون شرط یا شرط دیگه) بهم بده و درکل هروقت این شرط برای سطری درست بود سطر بعدشم بهم بده.
به نظرتون چطوری می تونم اینکار رو انجام بدم؟؟؟؟

parvizwpf
دوشنبه 03 شهریور 1393, 21:27 عصر
میشه بیشتر؟ توضیح؟

mojdeh9000
دوشنبه 03 شهریور 1393, 21:45 عصر
میشه بیشتر؟ توضیح؟

همش همین بود مثلا جدولم اینه
name ,position
mojde ,0
amin , 1
maryam ,2
mahdi ,0
ali , 1
حالا میخوام این کوئری اجرابشه
select * from table where name like 'm%' and position=0



بااین تفاوت که فقط یه سطر بعدیش رو هم بدون توجه به شرط(بدون شرط و یا مثلا شرطposition=1) هم توی خروجی داشته باشم یعنی خروجیم این باشه :
mojde ,0
amin , 1
mahdi ,0
ali , 1
امیدوارم منظورم رو متوجه شده باشید....راه حلی دارید براش؟؟؟

Rejnev
دوشنبه 03 شهریور 1393, 22:02 عصر
توی ms sql فکر میکنم بشه این مسئله رو با Cursor حل کرد. بنحوی که select * from tbl میگیری، بعد توی حلقه پیمایش cursor ردیفهایی که دارای شرط هستن رو برمیگردونی و اشاره گر رو یک واحد به جلو هدایت میکنی و ردیف بعدیش رو هم بدون در نظر گرفتن اشاره گر به خروجی میفرستی.
فقط بدیش اینه که جدول scan میشه.
معادل mysql رو باید سرچ بزنی.

mojdeh9000
دوشنبه 03 شهریور 1393, 22:11 عصر
توی ms sql فکر میکنم بشه این مسئله رو با Cursor حل کرد. بنحوی که select * from tbl میگیری، بعد توی حلقه پیمایش cursor ردیفهایی که دارای شرط هستن رو برمیگردونی و اشاره گر رو یک واحد به جلو هدایت میکنی و ردیف بعدیش رو هم بدون در نظر گرفتن اشاره گر به خروجی میفرستی.
فقط بدیش اینه که جدول scan میشه.
معادل mysql رو باید سرچ بزنی.
تا جایی که من میدونم استفاده از cursor ها هزینه زیادی داره.... راه حل بهتری ندارید؟؟؟

Rejnev
سه شنبه 04 شهریور 1393, 19:18 عصر
یک روش دیگه هم به ذهنم میرسه
یک ویوو باید بسازی که حالت اول رو سلکت بگیره...
حالا یک ویو دیگه میسازی که حالت رکوردهای بعدی رو سلکت میگیره...
در نهایت توی ویوو آخر این دو رو با هم union میکنی.
مثلا:
ویوو1:

/*view1:*/ select id,name from tbl where position=0

ویوو2:

/*view2:*/ select id,name from tbl as t1 join view1 as v1 on t1.id=v1.id+1

و در نهایت خروجی:

select id,name from view1
union
select id,name from view2

چطوره؟!
فقط مشکلی که هست اینه که من مبنای رکورد بعدی رو id+1 گرفتم... که شاید توی دیتاهای واقعی همچین ترتیبی وجود نداشته باشه.

mojdeh9000
سه شنبه 04 شهریور 1393, 23:45 عصر
یک روش دیگه هم به ذهنم میرسه
یک ویوو باید بسازی که حالت اول رو سلکت بگیره...
حالا یک ویو دیگه میسازی که حالت رکوردهای بعدی رو سلکت میگیره...
در نهایت توی ویوو آخر این دو رو با هم union میکنی.
مثلا:
ویوو1:

/*view1:*/ select id,name from tbl where position=0

ویوو2:

/*view2:*/ select id,name from tbl as t1 join view1 as v1 on t1.id=v1.id+1

و در نهایت خروجی:

select id,name from view1
union
select id,name from view2

چطوره؟!
فقط مشکلی که هست اینه که من مبنای رکورد بعدی رو id+1 گرفتم... که شاید توی دیتاهای واقعی همچین ترتیبی وجود نداشته باشه.

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