За последние 24 часа нас посетили 63037 программистов и 1741 робот. Сейчас ищут 865 программистов ...

INNER JOIN

Тема в разделе "PHP и базы данных", создана пользователем ky3mu4u, 18 июл 2011.

  1. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Есть такой кусок кода:
    $sql = "SELECT u.id, u.name, u.username, u.block, DATE_FORMAT(u.registerDate, '%d.%m.%Y') as registerDate, scu.status, sca.city, scu.status2, scu.dog_send, scu.upload, scu.params"
    . "\n FROM #__users as u"
    . "\n INNER JOIN #__scusers as scu ON(scu.user_id = u.id)"
    . "\n INNER JOIN #__scaddress as sca ON(sca.user_id = u.id)"
    . $where
    . $orderby
    ;
    как объеденить запрос inner join! у меня сейчас от такого запроса вывод таблицы двоиться, удаляешь нижнюю строчку inner join нечего не двоиться но данные из таблицы #__scaddress не загружаються в мой вывод! помогите плиз!
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Если что-то двоится, можно добавить DISTINCT

    SELECT DISTINCT u.id, u.name.... и т.д.

    или добавить группировку после $orderby

    . $orderby
    ."\n GROUP BY u.id"
     
  3. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    В подобных запросах FROM:JOIN работает как 1:M. Т.е. неважно сколько в таблице JOIN записей (1-2-10-миллион), они все выведутся. В Вашем случае, наверняка в scaddress есть две записи связанные с users - т.е. запрос работает нормально. По хорошему Вам надо изменить структуру БД. А без изменения структуры - использовать другой запрос, чтобы получить то, что Вы хотите.
     
  4. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    добавил DISTINCT теперь частично двоиться)) ID выводит так 310,309,309,308,307,306,305,305))) что делать?
     
  5. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    neverlose красавец))))
    SELECT DISTINCT частично перестало двоить добавил потом ."\n GROUP BY u.id" и все шикарно выводиться)) спасибо тебе)
     
  6. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    GROUP BY решение?! Ну-ну... ;))
     
  7. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Некоторым людям проще где-то подмазать, чем менять трубу.
     
  8. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    Блин с функцией . "\n GROUP BY u.id DESC" фильтр отказываеться далее работать, ее убираем, таблицы опять двоятся но фильтр работает!
    jimport('joomla.html.pagination');
    $pagination = new JPagination( $total, $limitstart, $limit );

    $sql = "SELECT DISTINCT u.id, u.name, u.username, u.block, DATE_FORMAT(u.registerDate, '%d.%m.%Y') as registerDate, scu.status, scu.status2, scu.dog_send, scu.upload, scu.params, a.city, scu.newor"
    . "\n FROM #__users as u"
    . "\n INNER JOIN #__scusers as scu ON(scu.user_id = u.id)"
    . "\n INNER JOIN #__scaddress as a ON(a.user_id = u.id)"
    . "\n GROUP BY u.id DESC"
    . $where
    . $orderby
    ;
    $rows = $this->_getList($sql, $pagination->limitstart, $pagination->limit);
    $output = array(
    'rows' => $rows,
    'pagination' => $pagination,
    'search' => $search,
    'order' => $filter_order,
    'order_Dir' => $filter_order_Dir
    );
    внизу кода фильтры! они походу дела небудут работаьт да с . "\n GROUP BY u.id DESC" ?? или есть возможность их прекрепить?
     
  9. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    1. $where должен идти перед GROUP BY

    2. Если не получиться после 1. сделай следующее:
    Надо переделать фильтр, заменив слово WHERE на HAVING в переменной $where ( переменная $where в данном случае, уже должна будет идти после GROUP BY).
    Если не найдёшь где это слово формируется замени $where на str_replace('WHERE', 'HAVING', $where)
     
  10. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    сделал проще)) создал новую ячейку в scusers, с параметром city, вытащил их из массива ячейки params, и залил туда) там всего то 200 городов)) теперь и не двоит и фильтры работают)
     
  11. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
  12. alexfer

    alexfer Активный пользователь

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
    ky3mu4u
    Может сделать нормализацию?, а не выдергивать гланды через жопу.
     
  13. ky3mu4u

    ky3mu4u Активный пользователь

    С нами с:
    16 ноя 2007
    Сообщения:
    111
    Симпатии:
    0
    вечерком после работы почитаю про нормализацию))