SQL запрос выводит 1 запись в место 2

Astral Man

We Will Rock You
SQL запрос выводит 1 запись в место 2

Всем привет!

Есть SQL запрос:
SELECT *
FROM IMS_LGN_user_group a INNER JOIN
IMS_LGN_group b ON a.id_group = b.id_group
WHERE a.id_user = '1'

В Interprise manager выводит две записи, а php скрипт только одну первую, в чем может быть проблема?
PHP:
    $db->open();
    $sql = "SELECT * 
            FROM ".DB_PREFIX."_user_group a INNER JOIN ".DB_PREFIX."_group b
            ON     a.id_group = b.id_group
            WHERE  a.id_user = '1' ";
    $db->query($sql);
    $result = $db->fetch_assoc();    
    print_r($result);
    $db->close();
 

Demiurg

Guest
потому что в php ты вытаскиваешь только одну запись
$db->query($sql);
$result = $db->fetch_assoc();
print_r($result);
$result = $db->fetch_assoc();
print_r($result);
$db->close();

вот тебе 2
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
Спасибо, я понял. У меня еще одна проблемка глянь скрипт:
PHP:
function main_menu() {
    global $db;
    
    $db->open();
    $sql = "SELECT * 
            FROM ".DB_PREFIX."_user_group a INNER JOIN ".DB_PREFIX."_group b
            ON     a.id_group = b.id_group
            WHERE  a.id_user = '1' ";
    $db->query($sql);
    //$db->close();

    while ($result = $db->fetch_assoc()) {
        $head_group = $result['name'];
        $id_group   = $result['id_group'];
        echo $head_group;

            $db->open();
            $sql2 = "SELECT * 
                    FROM ".DB_PREFIX."_group_mod a INNER JOIN ".DB_PREFIX."_mod b
                    ON     a.id_mod = b.id_mod
                    WHERE  a.id_group = '$id_group' ";
            $db->query($sql2);
            //$db->close();
            
            while ($result2 = $db->fetch_assoc()) {
                $id_mod = $result2['id_mod'];
                $name = $result2['name'];
                echo "<div id=\"menu\">
                        <li><a href=\"".$_SERVER['PHP_SELF']."?mod=".$id_mod."\">".$name."</a> 
                      </div>";
            }
    }
}
Почему-то выводится только одна группа меню, а должно две.
 

Demiurg

Guest
я не знаю, что у тебя за $db. Но скорее всего, при вложеных циклах с запросами надо делать новый экземпляр или каким то образом передовать туда идентификатор ресурса. А еще лучше составить 1 запрос.
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
я не знаю, что у тебя за $db. Но скорее всего, при вложеных циклах с запросами надо делать новый экземпляр или каким то образом передовать туда идентификатор ресурса. А еще лучше составить 1 запрос.
Вот что в $db:
PHP:
<?php
class DB
{
    var $host       = '';
    var $user       = '';
    var $pass       = '';
    var $name       = '';
    var $persistent = false;

    var $conn = NULL;

    var $result = false;

    function DB($host, $user, $pass, $name, $persistent = false) 
    {
        $this->host       = $host;
        $this->name       = $name;
        $this->pass       = $pass;
        $this->user       = $user;
        $this->persistent = $persistent;
    }

    function open()
    {
        if ($this->persistent) {
            $func = 'mssql_pconnect';
        } else {
            $func = 'mssql_connect';
        }

        $this->conn = $func($this->host, $this->user, $this->pass);
        if (!$this->conn) {
            return false;
        }                        

        if (!mssql_select_db($this->name, $this->conn)) {
            return false;    
        }
        return true;
    }

    function close() 
    {
        return(mssql_close($this->conn));
    }

    function error()
    {
        return (mssql_get_last_message());
    }

    function query($sql)
    {
        $this->result = mssql_query($sql, $this->conn);
        return($this->result != false);
    }

    function affected_rows()
    {
        return(mssql_rows_affected($this->conn));
    }

    function num_rows()
    {
        return(mssql_num_rows($this->result));
    }

    function fetch_object()
    {
        return(mssql_fetch_object($this->result, MSSQL_ASSOC));
    }

    function fetch_row()
    {
        return(conv_char(mssql_fetch_row($this->result)));
    }

    function fetch_array()
    {
        return(conv_char(mssql_fetch_array($this->result, MSSQL_NUM)));
    }

    function fetch_assoc()
    {
        return(conv_char(mssql_fetch_assoc($this->result)));
    }      

    function free_result()
    {
    return(mssql_free_result($this->result));
    }
} 
?>
Как сдлеать одним запросом?
 

Demiurg

Guest
>Как сдлеать одним запросом?
если опишешь структуру бд и скажешь, что тебе надо получить, то может быть скажу.
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
>Как сдлеать одним запросом?
если опишешь структуру бд и скажешь, что тебе надо получить, то может быть скажу.
Задача след. нужно каждому пользователю назначать группу доступа (Админ, пользователь и т.д.) в каждую группу входит определенный набор модулей но при этом каждому пользователю можно отключать некоторые модули из группы.
таблицы:
user:
id_user, login, pass

user_group:
id_group, id_user

user_mod:
id_mod, id_user

mod:
id_mod, name, sys_name

group:
id_group, name

group_mod:
id_mod, id_group

После успешной авторизации мы знаем id_user, смотрим в user_group какие группы доступны, смотрим что входит в эти группы и проверяем разрашены они пользователю или нет, если да то выводим меню.
 

Demiurg

Guest
то есть нужно получить список доступных модов для данного юзера ?
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
то есть нужно получить список доступных модов для данного юзера ?
Да, но выводить нужно так:

Группа1
Мод1(ссылка на модуль)
Мод2
Группа2
Мод1
Мод3
 

Demiurg

Guest
если я правильно понял, ко всему прочему пользователь может иметь права на мод без всяких групп.
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
если я правильно понял, ко всему прочему пользователь может иметь права на мод без всяких групп.
Нет, пользователь должен быть хотя бы в одной группе.
 

Demiurg

Guest
тогда что в этой таблице :
user_mod:
id_mod, id_user

?
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
тогда что в этой таблице :
user_mod:
id_mod, id_user

?
Какие модули каким пользователям доступны. В группе какое то кол-во модулей, одному пользователю я даю полный доступ к группе, а второму например пару модулей выключаю.
 

Demiurg

Guest
правильно, значит все таки пользователь может иметь доступ к моде, даже если он не принадлежит ни к одной группе, к которой эта можа пренадлежит.
 

Astral Man

We Will Rock You
Автор оригинала: Demiurg
правильно, значит все таки пользователь может иметь доступ к моде, даже если он не принадлежит ни к одной группе, к которой эта можа пренадлежит.
Да получается так.
 

Demiurg

Guest
ну так таки моды пойдут отдельным списком ?
 

Demiurg

Guest
первый список

select * from mod join group_mod on mod.id_mod = group_mod.id_mod
join user_group on group_mod.id_group = user_group.id_group
where user_group.id_user = $iduser order by user_group.id_group

второй список:

select * from mod join user_mod using(id_mod)
where user_mod.id_user = $iduser
 
Сверху