Salamlar. deməli belə bir sorgu var. Mysql bazada bölmələr və həmən bölmələrin hərəsinə aid alt bölmələr var. Və mən istəyirəmki bölmələr görünsün və hər bölmənin də alt bölməsi öz altında sıralansın. məsələn belə.
Bölmə 1
altbölmə1
altbölme2
—
Bölmə2
altbölmə3
altbölmə4
bu tip çlxarmaq istıyəirəm. Qeyd edim ki hər bölmələr və alt bölmələr ayri ayri tablelerde saxlanılır.tutaq ki deyek beledi cedvel
Bolme_table (id,ad)
Altbolme_table (id,ad,bolme_id)
bunu dolayı yolla istədiyim nəticəni alıram. bazaya bir neçə sorğu göndərməklə. ama istəyirəmki bir sorğu ile hell edəm. əger mümkünsə. öz yazdiğım variant belədir
$bolme_sorgu = mysql_query("SELECT * FROM `bolmeler`"); while($bolme_array = mysql_fetch_assoc($bolme_sorgu)) { $altbolme_sorgu = mysql_query("SELECT * FROM `altbolmeler` WHERE `bolme_id` = '".$bolme_array['id']."'"); if(mysql_num_rows($altbolme_sorgu) < 1) { continue; } echo $bolme_array['ad'].'<br/>'; while($altbolme_array = mysql_fetch_assoc($altbolme_sorgu)) { echo $altbolme_array['ad']; }}
Bu formada yazıram istediyim neticə alnır. sizce düzgün yazilişdı bu forma? daha sadə və serverə daha az yuk vere bilecək bir yolu varmi?
belə bir yolla da yoxladim ama yene istediyim netice alinmadi.
$sorgu = mysql_query("SELECT bolmeler.ad AS bolme_ad, altbolmeler.id AS altbolme_id, altbolmeler.ad AS altbolme_ad FROM bolmeler INNER JOIN altbolmeler ON altbolmeler.bolme_id = bolmeler.id"); while($array_sorgu = mysql_fetch_assoc($sorgu)) { echo $array['bolme_ad'].'<br/>'; echo $array['altbole_ad'].'<br/>'; }
bu formada da yazdim ama burda da yenə mən deyən nəticəni vermir. hər altbölməyə ayrı ayrılıqda bölmə adı verir təkrar. veriləcək cavablara görə öncədən təşəkkürl edirəm
Verilmiş cavablar və yazılan şərhlər (10 cavab var)
2
Elə birinci etdiyin düzgündü, başqa bir sql sorğu ilə bunu rahat etmək olmaz məncə. Hansı cür də etsən yenə ikinci sorğu mütləq işləməlidi.
Ancaq o da düzdü ki iki cədvəldən eyni anda bir sorğu ilə nəticə almaq olar, ama bu işin bölmə və alt bölməyə aidiatı yoxdu. Çünki əsəs bölmə olmasa onu alt bölməsidə tapıla bilməz, ona görədə mütləq iki sorğu işləyəcək bu prosesdə. Özünüz etdiyinin düzdü.
0
Təşəkkürlər cavaba görə. belə bir yolla yazarkən bir sorğu ilə hər 2 bölməni və altbölməni çıxardıram.
belə təxmini mən istədiyim nəticəyə yaxin bir şey verir. belə
bu çıxarılışı verir.
ama bunu ekrana verəndə bu formada verir
Avtomobil
Hundai,Porche
ama mən istəyirəm ki belə bir şey edəm.
Avtomobil
Hundai_id Hundai
Porche_id Porche
2
İlk olaraq bunu deyim. Hər sorğuda əgər həmin table-da sütunlar çoxdursa SELECT * seçmək yanlışdır. Lazım olan sütunu seçməklə, bir sorğu ilə bir dövr yaratmaqla daha sürətli nəticə əldə edirik.
Nümunə:
0
Çox sağol cavaba görə. Ama yazdığınız kod mənə istədiyim nəticəni vermir axı. Orda yenə də hər dəfə həm bolme adini həmdə altbolmə adını verecək ekrana. Ama mənə lazımdıki bir hər bölməni bir dəfə versin və hər bölməyə aid olan altbölmələri də bölmənin altında sıralasın. fikrimi tam çatdırmaq üçün aşağıdakı kodu nümunə göstərim. Eynilə aşağıda qeyd etdiyim kodun verdiyi nəticəni almaq istəyirəm.
Eynilə bu kodun verdiyi nəticə ama daha yüngül bazaya daha az yük verəcək bir kodla mümkündümü?
0
Aydındır. Bu halda öz yazdığın koddan fərqli olaraq ancaq massivlərin köməyi ilə sürət qazanmaq olar. Amma hazırki kodda 1 artıq yoxlama var onu götürərsən. Bu şərtə ehtiyac yoxdur. Onsuzda $bolme_array ödənməyəndə dövr dayanır.
Massivlə nümunə istəsən köməklik edərəm
0
Burda bolmeye gore yazmamisam. bolme onsuzda her defe odenir. onu altbolmeyye gore yazmisam. eger o bolma bosdurse alt bolmesi yoxdursa onda bos bolmeni ekrana vermesin
1
Adətən bölmələr az olur, ona görə də massivə salmaq olar.
Nümunə:
0
Tesekkurler. bele bir yolla yazdim men ve eyni neticeni aldim. ama bilmirem ne derecede duzgundu yazdigim.
1
Əgər nəticə eynidirsə demək ki səhv yoxdur. Sadəcə sənə sürət maraqlıdırsa o halda bütün variantları yoxla hansı daha tez yerinə yetirsə onu seçə bilərsən.
2
Bu sual tanış gəldi:
MySql ile bolmeni ve altbolmeni cixarmaq
Sual verin
Cavab verin