• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
[حل شد]مشکل در Select و sort کردن یک سری رکوردهای خاص
#1
بسم الله....
سلام....
من در حال کار بر روی یک نرم افزار رزرواسیون بلیت های چارتر هستم... طبق خواسته مشتری و بر اساس مدل برنامه وقتی شما مبدا و مقصد یک پرواز رو انتخاب می کنین باید لیست پرواز رو به این شکل بهتون نشون بده که:
کلیه پرواز هایی که مبدا و مقصدشون طبق خواسته ی مشتری هست لیست بشن....اگه مبدا و مقصد جابجا بودن توی اون پرواز ، اون پرواز رو به عنوان پرواز برگشت نشون بده و در حالت عادی هم پرواز رفت.

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

مثلا: اگه طرف انتخاب کنه مشهد- تهران و ما پروازهای زیر رو داشته باشیم:

1-مشهد -تهران ساعت 10
2-مشهد-تهران ساعت 11
3-تهران -مشهد ساعت 12
4-مشهد-تهران ساعت 13


میخوان ترتیب نشون دادن به این صورت بشه که
1
2
4
3

برای این شرط آخر میتونین راهنماییم کنین؟

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

آیا نیازه یک فیلدی هم داشته باشم برای هر پرواز که مشخصا تعیین کنم اون پرواز رفته یا برگشت؟ یا اینکه میشه بدون اون هم توی کوئری مشخص کرد....
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#2
نقل قول:بسم الله....
مگه جن دیدی؟ Big Grin

نقل قول:سلام....
علیک Smile

نقل قول:برای این شرط آخر میتونین راهنماییم کنین؟
دو راه به ذهنم رسید ولی این یکی بهتره.
کد:
SELECT * FROM `table` ORDER BY `cityName`
غایب
  پاسخ
تشکر شده توسط :
#3
ببینین یه جدول جدا دارم که شهرها رو اونجا ذخیره کرده...توی جدول پروازها هم یه فیلد مبدا هست و یه فیلد مقصد که توش آی دی اون شهرها قرار میگیره....
مثلا الان مشهد 1 هست و تهران 2.

خودم اول توی کوئریم گذاشتم بر اساس عدد شهر مبدا sort کنه اما خب برای مثال مشهد -تهران که میشه 1-2 درست جواب میداد....اما اگه کسی میومد انتخاب میکرد تهران ، مشهد میشد 2-1 و اینجا پروازهای برگشت رو اول نشون میداد...چون اینجا مبدا میشد تهران و عددش 2 بود و مقصد مشهد با آی دی 1.

و چون پروازهامون مثلا مشهد-تهران تعریف شده و یک دونه توی مثال بالا تهران مشهد داشتیم اون تهران مشهد رو باز میاورد آخر
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#4
ASC رو همراه ORDER BY تست کردی؟ یعنی
کد:
SELECT * FROM `table` ORDER BY `cityId` ASC
غایب
  پاسخ
تشکر شده توسط :
#5
آره... دقیق بخوام بگم کوئریم اینه:

کد پی‌اچ‌پی:
if ($destination==-1){
$result=mysql_query("select *,$source_city,$destination_city from tbl_flight where date >= '$date1' and date <= '$date2' and (source=$source or destination=$source)  order by `date` asc,`source` asc ,`time` asc")or die(mysql_error());
}else{
$result=mysql_query("select *,$source_city,$destination_city from tbl_flight where date >= '$date1' and date <= '$date2' and (source=$source and destination=$destination or (source=$destination and destination=$source))  order by `date` asc,`source` asc,`time` asc")or die(mysql_error());


درصورتی که مقصد کلیه مسیرها باشه شرط اول اجرا میشه و در صورتی که مقصد یک شهر خاص باشه دومی اجرا میشه....
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#6
من گیج شدم. در مورد اون راهنمایی که تو اولین پستت خواستی خیلی راحت با قرار دادن ORDER BY ASC روی آیدی شهر ها انجام میشد. یه مثال دیگه همونطوری بزن بذار من بفهمم مشکل دقیق کجاست Undecided
غایب
  پاسخ
تشکر شده توسط :
#7
بذار مثلا رو اینجوری توضیح بدم....


شما میخوای بیای چک کنی پروازهای مشهد -تهران و بالعکس چیان....
فرض کنیم این اطلاعات در دیتابیس ذخیره شده:
مبدا-مقصد ساعت پرواز
1- مشهد- تهران 10 صبح
2- مشهد -تهران 11 صبح
3- تهران - مشهد 12 ظهر
4- مشهد - تهران 13 ظهر


دو حالت پیش میاد دیگه:
1-کاربر مشهد رو انتخاب کنه به عنوان مبدا در اون صورت لیست باید به صورت زیر نشون داده بشه:

1-مشهد -تهران 10 صبح
2-مشهد- تهران 11 صبح
3-مشهد تهران 13ظهر
4-تهران -مشهد 12 ظهر

یعنی مرتب سازی به این صورت باشه که اول پروازهای رفت طبق انتخاب کاربر(یعنی مبدا مشهد) نشون داده بشه(یعنی مشهد-تهران ها) بعد پرواز برگشت یعنی تهران -مشهد


حالت دوم:
2- کاربر تهران رو انتخاب کنه به عنوان مبدا در اون صورت لیست باید به این صورت نشون داده بشه بهش:


1-تهران-مشهد 12 ظهر
2-مشهد-تهران 10 صبح
3-مشهد تهران 11 صبح
4-مشهد تهران 13 ظهر


منظورمو متوجه شدین؟
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#8
چیزی من برای خودم حلش کردم، به صورت زیر هست. تو باید ساختمان پایگاه داده ات رو تغییر بدی.

کد پی‌اچ‌پی:
<?php

/*
 * to bayad ye chenin jadvali dashte bashi
 * table: parvaz ha, columns: mabda -  maghsad, ...
 * mashhad=0, tehran=1
 */

mysql_query("SELECT * FROM `table` WHERE (`mabda` = '0' AND `maghsad` = '1') OR (`mabda` = '1' AND `maghsad` = '0') ORDER BY `mabda`")

?>

خروجی اگر مشهد مبدا باشه اینطوریه:
مشهد - تهران
مشهد - تهران
مشهد - تهران
تهران - مشهد

و اگر تهران مبدا باشه اینطوریه:
تهران - مشهد
مشهد - تهران
مشهد - تهران
مشهد - تهران
غایب
  پاسخ
تشکر شده توسط :
#9
خب ماله منم همینه دیگه

میدونی بهرحال مبدا و مقصد هر کدوم یه عدد هستن دیگه درسته؟ پس موقع مرتب کردن بر اساس اون مرتب میکنه...وقتی جلوی Order by mabda چیزی ننویسی پیش فرض ASC در نظر میگیره.... و مشهد که کوچیکتره رو در هر دو حالت اول نشون میده
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#10
نقل قول:خب ماله منم همینه دیگه
باید جواب بده. خروجی که من حدس زدم دقیقا همون چیزیه که تو خواستی. دیگه نمیدونم.
غایب
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان