PDA

View Full Version : سوال: کمک در ارسال یک کوئری SQL



رضا قربانی
چهارشنبه 30 فروردین 1391, 22:07 عصر
سلام به اساتید بزرگوار و خسته نباشید

روی یک کوئری گیر کردم و نتونستم انجام بدم .

من فقط یک جدول به این صورت که نام شهر - منطقه - بخش رو دارم (shahr-mantaghe-bakhsh) فیلد .

1 : می خوام شهر به صورت گروهی نمایش بده Group by (چون شاید چندین رکورد یک نام داشته باشم)

2 : و بعد بر اساس نام شهر ، یعنی تمامی mantaghe هایی که نام shahr یکی بود بره تو زیر مجموعه shahr نمایش بده

3 : زیر مجموعه شهر که mantaghe می شه . زیرمجموعه ی mantaghe لیست کامل bakhsh بخش باشه . ( یعنی تمام bakhsh هایی که نام mantaghe یکی بود بره توی زیر مجموعه mantaghe)

در کل حالت منو و زیرمنوها می شه . شکل پیاده سازی هم براتون نوشتم :



<ul>
<li>
shahr(Group by shahr)<br />
1 2 3 ...
<ul><li>
mantaghe(Group by mantaghe)<br />
1 2 3 ...

<ul><li>
bakhsh<br />
1 2 3 ...
</li></ul>

</li></ul>

</li>
</ul>



امیدوارم تونسته باشم منظورم رو به شما برسونم و ممنون می شم برای نوشتن کوئری کمکم کنید

djsaeedkhan
چهارشنبه 30 فروردین 1391, 23:56 عصر
سلام
به نظر من شاید بشه همه اینا رو توی یه کوری ای هم قرار داد ولی پیشنهاد می کنم که بیا اینکارو انجام بده
اول همه اطلاعات رو بگیر و در یه آرایه قرار بده.
بعد بیا به ازای هر سطر از شهر تمام منطقه ها رو قرار بده و اگه خواستی نمایش بده و نخواستی تو یه آرایه ای قرار بده و در آخر اونو چاپ کن.
البته می تونی از ساختار درختی هم استفاده کنی که بسیار کار رو راخت می کنه.
http://barnamenevis.org/showthread.php?322408-%D9%85%D9%86%D9%88-%D9%87%D8%A7%DB%8C-%D8%AF%D8%B1%D8%AE%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A8%DB%8C-%D9%86%D9%87%D8%A7%DB%8C%D8%AA-%D8%B3%D8%B7%D8%AD

MMSHFE
پنج شنبه 31 فروردین 1391, 11:17 صبح
جدا از اینکه این روش طراحی اشتباهه، باید از کدی شبیه این استفاده کنید:


mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
$cities = mysql_query('SELECT DISTINCT `shahr` FROM `table` ORDER BY `shahr`');
if($cities && mysql_num_rows($cities) > 0) {
echo '<ul>'.PHP_EOL;
while($city = mysql_fetch_assoc($cities)) {
echo '<li>'.$city['shahr'].'</li>'.PHP_EOL;
$towns = mysql_query("SELECT DISTINCT `mantaghe` FROM `table` WHERE (`shahr`='{$city['shahr']}') ORDER BY `mantaghe`");
if($towns && mysql_num_rows($towns) > 0) {
echo '<ul>'.PHP_EOL;
while($town = mysql_fetch_assoc($towns)) {
echo '<li>'.$town['mantaghe'].'</li>'.PHP_EOL;
$regions = mysql_query("SELECT DISTINCT `bakhsh` FROM `table` WHERE (`shahr`='{$city['shahr']}' AND `mantaghe`='{$town['mantaghe']}') ORDER BY `bakhsh`");
if($regions && mysql_num_rows($regions) > 0) {
echo '<ul>'.PHP_EOL;
while($region = mysql_fetch_assoc($regions)) {
echo '<li>'.$region['bakhsh'].'</li>'.PHP_EOL;
}
echo '</ul>'.PHP_EOL;
mysql_free_result($regions);
}
}
echo '</ul>'.PHP_EOL;
mysql_free_result($towns);
}
}
echo '</ul>'.PHP_EOL;
mysql_free_result($cities);
}

موفق باشید.

رضا قربانی
پنج شنبه 31 فروردین 1391, 12:07 عصر
دست گلت درد نکنه آقای شهرکی که وقت گذاشتی برای حل مشکل ما . این عمل اشتباه نیست و خودم هم تقریبا دیگه نا امید شده بودم به همین روش کوئری دادن عمل کردم و دیدم اصلا بهینه نیست در نتیجه اومدن اینجا پست زدم تا دوستان اگر sql وارد هستند با یک کوئری این عمل رو انجام بدن.

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


ممنون می شم اگر کسی وارده کمکمون کنه.

با تشکر

MMSHFE
پنج شنبه 31 فروردین 1391, 12:33 عصر
نه منظورم این بود که کلاً SubQueryهای تودرتو اونم داخل حلقه و... اشتباهه. کلاً مستندات MySQL هم پیشنهاد کرده تا جایی که میتونید از SubQuery پرهیز کنید. موفق باشید.

رضا قربانی
پنج شنبه 31 فروردین 1391, 17:06 عصر
نه منظورم این بود که کلاً SubQueryهای تودرتو اونم داخل حلقه و... اشتباهه. کلاً مستندات MySQL هم پیشنهاد کرده تا جایی که میتونید از SubQuery پرهیز کنید. موفق باشید.


الان راه حل شما برای ما چیه ؟

ولی با یک کوئری می شه نوشتا ...

MMSHFE
پنج شنبه 31 فروردین 1391, 19:31 عصر
راه حل رو که گفتم.