из базы необходимо вывести пол искомого партнера (скрипт знакомств)

Тема в разделе "Базы данных", создана пользователем viprus, 17 янв 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. viprus

    viprus Постоялец

    Регистр.:
    10 дек 2006
    Сообщения:
    105
    Симпатии:
    50
    Привет!

    Необходимо вывести пол искомого партнера (скрипт знакомств)
    У каждого пользователя он находится в таблице USER_MATCH_TABLE. в поле id_user_type (где значение 1-парень, 2 -девушка)

    [​IMG]

    В свою очередь в таблице USERTYPES_SPR_TABLE имеются поля дающие языковое значение (1-парень, 2-девушка)

    [​IMG]

    Имеется примерно такой запрос

    Код:
    $strSQL = "select u.fname, u.sname, u.login, u.status, u.email, u.date_birthday, u.couple, u.user_type, u.user_subtype, u.id_country, u.id_city, u.id_region, u.zipcode, u.comment, u.headline, u.id_nationality, u.id_language_1, u.id_language_2, u.id_language_3, u.id_weight, u.id_height, u.root_user, u.guest_user, um.id_user_type, um.id_user_subtypes, um.age_min, um.age_max, um.id_relationship, u.site_language, u.phone
                        from ".USERS_TABLE."  as u
                        left join ".USER_MATCH_TABLE." as um on um.id_user=u.id
                        where u.id='".$id."'";
            $rs = $dbconn->Execute($strSQL);
            $row = $rs->GetRowAssoc(false);
    

    как будет выглядеть в итоге весь код чтобы в php пол показывал типа {$data.user_type} ?? Спасибо!!
     
  2. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    вместо u.user_type
    напишите u.id_user_type as user_type
     
    viprus нравится это.
  3. viprus

    viprus Постоялец

    Регистр.:
    10 дек 2006
    Сообщения:
    105
    Симпатии:
    50
    спасибо за совет!
    ..но при замене u.user_type на u.id_user_type as user_type - ошибку дает
     
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    попробуйте
    Код:
    select
        u.*,
        um.*,
        ug.name as gender
        from ".USERS_TABLE."  as u
        left join ".USER_MATCH_TABLE." as um on um.id_user=u.id
        left join ".USERTYPES_SPR_TABLE." as ug on ug.id=um.gender
        where u.id='".$id."'";
    
    если переменная $id берётся напрямую из $_GET или $_POST, например, то лучше для неё сделать intval

    ну и
    Код:
    ug.name as gender
    можно написать как
    Код:
    ug.gender as user_type
    чтоб добиться {$data.user_type}, только проследите за тем, чтоб поля user_type не было в результате
    Код:
    u.*
    или
    um.*
     
    viprus нравится это.
  5. viprus

    viprus Постоялец

    Регистр.:
    10 дек 2006
    Сообщения:
    105
    Симпатии:
    50
    ipbfan2008, спасибо, но не пошло че то..

    есть аналогичная конструкция и она успешно работает но не для ПОЛА, а для ЦЕЛИ знакомства, и всё отлично выводится {$data.relationship}

    Вот кусок который идет следом за тем что я уже давал


    Код:
    if (strlen($row["id_relationship"])){
            $where_str = ($row["id_relationship"] == "0") ? "" : "where a.id in (".$row["id_relationship"].")";
            $strSQL = "Select  a.id, b.".$field_name." as name from  ".RELATION_SPR_TABLE." a
                left join ".REFERENCE_LANG_TABLE." b on b.id_reference=a.id  and b.table_key='".$multi_lang->TableKey(RELATION_SPR_TABLE)."'
                ".$where_str." order by a.sorter";
            $rs = $dbconn->Execute($strSQL);
            $relations = array();
            if ($rs)
            while(!$rs->EOF){
                $row = $rs->GetRowAssoc(false);
                $relations[] = stripslashes($row["name"]);
                $rs->MoveNext();
     
            }
            $data["relationship"] = implode(", ", $relations);
        }

    RELATION_SPR_TABLE

    [​IMG]

    REFERENCE_LANG_TABLE (я так понял обращение в эту таблицу связанно с мультиязычностью)

    [​IMG]


    я делал по аналогии, но ничего не выходит...

    Код:
    if (strlen($row["id_user_type"])){
            $where_str = ($row["id_user_type"] == "0") ? "" : "where a.id in (".$row["id_user_type"].")";
            $strSQL = "Select  a.id, b.".$field_name." as name from  ".USERTYPES_SPR_TABLE." a
                left join ".REFERENCE_LANG_TABLE." b on b.id_reference=a.id  and b.table_key='".$multi_lang->TableKey(USERTYPES_SPR_TABLE)."'
                ".$where_str." order by a.sorter";
            $rs = $dbconn->Execute($strSQL);
            $id_user_type = array();
            if ($rs)
            while(!$rs->EOF){
                $row = $rs->GetRowAssoc(false);
                $id_user_type[] = stripslashes($row["name"]);
                $rs->MoveNext();
            }
            $data["user_type"] = implode(", ", $id_user_type);
        }
     
  6. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    А что именно не пошло? Т.к. ipbfan2008 вам всё правильно написал.
    Единственное, из фразы "в таблице USER_MATCH_TABLE. в поле id_user_type (где значение 1-парень, 2 -девушка)" - кажется, что за пол отвечает поле id_user_type, хотя по логике за него должно отвечать поле gender.

    Попробуйте такой вариант:


    PHP:
    $strSQL "select u.fname, u.sname, u.login, u.status, u.email, u.date_birthday, u.couple, u.user_type as ut, u.user_subtype, u.id_country, u.id_city, u.id_region, u.zipcode, u.comment, u.headline, u.id_nationality, u.id_language_1, u.id_language_2, u.id_language_3, u.id_weight, u.id_height, u.root_user, u.guest_user, um.id_user_type, um.id_user_subtypes, um.age_min, um.age_max, um.id_relationship, u.site_language, u.phone,  ug.name as user_type
                        from "
    .USERS_TABLE."  as u
                        left join "
    .USER_MATCH_TABLE." as um on um.id_user=u.id
                        left join "
    .USERTYPES_SPR_TABLE." as ug on ug.id=um.gender
                        where u.id='"
    .$id."'";
            
    $rs $dbconn->Execute($strSQL);
            
    $row $rs->GetRowAssoc(false);
     
    ipbfan2008 нравится это.
  7. viprus

    viprus Постоялец

    Регистр.:
    10 дек 2006
    Сообщения:
    105
    Симпатии:
    50
    ShaDeRzz, как я понял, логика следующая (может я плохо объяснил, сорри..).

    Пол владельца анкеты берется как раз из gender (USER_MATCH_TABLE). Но эти данные выводить не нужно, там всё ОК.

    А вот у владельца анкеты есть предпочтения, т.е. пол кого он ищет, и это берётся из связки id_user_type (USER_MATCH_TABLE) и name (USERTYPES_SPR_TABLE)
     
  8. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    в таком случае действительно нужно использовать поле id_user_type вместо gender в моём или ShaDeRzz варианте. Так что, собственно, не так в запросе то?
     
  9. viprus

    viprus Постоялец

    Регистр.:
    10 дек 2006
    Сообщения:
    105
    Симпатии:
    50
    Верно я понял, что достаточно этого кода

    Код:
    $strSQL = "select u.fname, u.sname, u.login, u.status, u.email, u.date_birthday, u.couple, u.user_type as ut, u.user_subtype, u.id_country, u.id_city, u.id_region, u.zipcode, u.comment, u.headline, u.id_nationality, u.id_language_1, u.id_language_2, u.id_language_3, u.id_weight, u.id_height, u.root_user, u.guest_user, um.id_user_type, um.id_user_subtypes, um.age_min, um.age_max, um.id_relationship, u.site_language, u.phone,  ug.name as user_type
                        from ".USERS_TABLE."  as u
                        left join ".USER_MATCH_TABLE." as um on um.id_user=u.id
                        left join ".USERTYPES_SPR_TABLE." as ug on ug.id=um.id_user_type 
                        where u.id='".$id."'";
            $rs = $dbconn->Execute($strSQL);
            $row = $rs->GetRowAssoc(false);
    или этого

    Код:
    select
        u.*,
        um.*,
        ug.name as id_user_type
        from ".USERS_TABLE."  as u
        left join ".USER_MATCH_TABLE." as um on um.id_user=u.id
        left join ".USERTYPES_SPR_TABLE." as ug on ug.id=um.id_user_type
        where u.id='".$id."'";


    а в php просто добавить {$data.user_type} ?

    или еще что-то надо там дописывать?
    (сорри, для меня sql - примерно как китайский язык)
     
  10. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    не ug.name as id_user_type
    а, ug.name as user_type

    оба примера одинаковы, с той разницей, что во втором из табличек u и um будут возвращены все возможные поля, а в первом случае только перечисленные
     
Статус темы:
Закрыта.