Mysqlda bir neçə tabledən məlumat çəkmək

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


Yadda saxlama
Kateqoriya: Sual . , , , . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (10 cavab var)

(15:36, 09/02/2013 ) #27124

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ü.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (16:10, 09/02/2013 ) #27128

    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.

    $query = mysql_query("SELECT bolmeler.ad AS bolme_ad,
    GROUP_CONCAT(altbolmeler.id) AS altbolme_id,
    GROUP_CONCAT(altbolmeler.ad) AS altbolme_ad
    FROM bolmeler JOIN altbolmelerr ON bolmeler.id=altbolmelerr.bolme_id
    GROUP BY bolmeler.id");

    belə təxmini mən istədiyim nəticəyə yaxin bir şey verir. belə

    Array ( [bolme_ad] => Avtomobil [altbolme_ad] => Hundai,Porche [altbolme_id] => 1,2 )
    

    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

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(19:13, 09/02/2013 ) #27132

İ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ə:

$q = mysql_query("SELECT `ad`,(SELECT `ad` FROM `altbolmeler` WHERE `altbolmeler`.`bolme_id` = `bolmeler`.`id` LIMIT 1) AS `ad2`,(SELECT `id` FROM `altbolmeler` WHERE `altbolmeler`.`bolme_id` = `bolmeler`.`id` LIMIT 1) AS `id` FROM `bolmeler` ORDER BY `id` ASC");

 

while($r = mysql_fetch_assoc($q)) 
{

echo $r['ad'] . '<br/>' . $r['id'] . ' ' . $r['ad2'] . '<br/>';

}
Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (19:35, 09/02/2013 ) #27133

    Ç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.

    $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)) {
    ?>
    <input type="checkbox" value="<?php echo $altbolme_array['id']; ?>" name="operator_id[]"/>
    <?php echo $altbolme_array['ad']; ?><br/>
    <?php }} ?>
    

    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ü?

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(12:56, 10/02/2013 ) #27143

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.

if(mysql_num_rows($altbolme_sorgu) < 1) {
continue;
}

Massivlə nümunə istəsən köməklik edərəm

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (19:53, 10/02/2013 ) #27153

    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

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(13:11, 10/02/2013 ) #27144

Adətən bölmələr az olur, ona görə də massivə salmaq olar.

Nümunə:

$bolme = array(false,'Ölkə','Brauzer','Operator');

$count = sizeof($bolme) - 1;

for($i=1;$i<=$count;$i++)
{
	echo $bolme[$i] . '<br/>';
	$r = mysql_query("SELECT `id`,`ad` FROM `altbolmeler` WHERE `bolme_id` = '" . $i . "'");
	while ($a = mysql_fetch_assoc($r))
	{
		echo $a['id'] . ' - ' . $a['ad'] . '<br/>';
		
	}
	
}
Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(19:45, 10/02/2013 ) #27152

Tesekkurler. bele bir yolla yazdim men ve eyni neticeni aldim. ama bilmirem ne derecede duzgundu yazdigim.

<?php
$sorgu = mysql_query("SELECT CONCAT(bolmeler.ad) AS bolme_ad,
GROUP_CONCAT(altbolmeler.id) AS altbolme_id,
GROUP_CONCAT(altbolmeler.ad) AS altbolme_ad
FROM bolmeler JOIN altbolmeler ON
altbolmeler.bolme_id=bolmeler.id
GROUP BY bolmeler.id");
while($array = mysql_fetch_assoc($sorgu)) {
echo $array['bolme_ad'].'<br/>';
$altbolme_id = explode(',', $array['altbolme_id']);
$altbolme_ad = explode(',', $array['altbolme_ad']);
for($i = 0; $i < count($altbolme_id); $i++) {
?>
<input type="checkbox" value="<?php echo $altbolme_id[$i]; ?>" name="altbolme_id[]"/>
<?php echo $altbolme_ad[$i]; ?><br/>
<?php }} ?>
Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (23:16, 10/02/2013 ) #27164

    Ə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.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(16:03, 09/03/2013 ) #28094

Bu sual tanış gəldi:
MySql ile bolmeni ve altbolmeni cixarmaq

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Bu suala aid öz sualım var:
Sual verin
Bu suala cavab vermək istəyirəm:
Cavab verin

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

Software Developer cavab verdi - Wise vasitəsilə bank kartına pul köçürmə (1 gün əvvəl)

Software Developer cavab verdi - Rus dilindən mətni tərcümə etmək (1 gün əvvəl)

Cənab cavab verdi - Almanca söz bazası yığmaq (4 gün əvvəl)

rdrobert cavab verdi - Mikrofon süngərinə yazı (5 gün əvvəl)

rdrobert cavab verdi - Yerli virtual olaraq dost tapmaq platforması (5 gün əvvəl)

rdrobert cavab verdi - Almanca söz bazası yığmaq (5 gün əvvəl)

rdrobert cavab verdi - Playstation 4 almaq, Playsation klub açmaq (5 gün əvvəl)

rdrobert cavab verdi - Proqramistin ixtsasi hansidir? (5 gün əvvəl)

Software Developer cavab verdi - Azercell Kabinetim aplikasiyasında İstəSən tarifi haqqında (7 gün əvvəl)

Software Developer cavab verdi - Proqramistin ixtsasi hansidir? (7 gün əvvəl)

byshako cavab verdi - Google Azərbaycan nömrələrini qəbul etmir (17 gün əvvəl)

rdrobert cavab verdi - Honeygain, passiv gelir (18 gün əvvəl)

rdrobert cavab verdi - Xaricdən telefon getirmek (18 gün əvvəl)

rdrobert cavab verdi - Google Azərbaycan nömrələrini qəbul etmir (18 gün əvvəl)

rdrobert cavab verdi - AliExpress, Telefon, Rüsum (18 gün əvvəl)

Software Developer - 615 xal

E. Hacı - 607 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 434 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 23234 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2024