[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    ято значит min(0) я понимаю выбирать минимальное значение из столбца, но а если ноль, из чего будет братся минимальное значение???
     
  2. [R]eD

    [R]eD Elder - Старейшина

    Joined:
    1 Aug 2006
    Messages:
    72
    Likes Received:
    1
    Reputations:
    0
    есть таблица с рекордами

    и запрос

    PHP:

    SELECT 
    `name`,`map`,COUNT(`name`) AS `records_countFROM `records
        
    GROUP BY `name
        
    ORDER BY `records_countDESC 

    и на выходе например:
    Player1 123 рекордов
    Player2 80 рекордов
    Player3 14 рекордов


    все работает, но нужно чтобы COUNT(`name`) считало только для первых 15 записей для карты (map колонка), сейчас выводит общее кол-во записей, знаю что нужно использовать подзапрос но не получается, второй час бьюсь(
     
    #1582 [R]eD, 8 Jan 2012
    Last edited: 8 Jan 2012
  3. red_joker

    red_joker New Member

    Joined:
    4 Nov 2010
    Messages:
    31
    Likes Received:
    3
    Reputations:
    0
    MIN(0) = 0 , независимо от значений полей, из нуля и будет браться.
     
  4. mistermar

    mistermar New Member

    Joined:
    5 Jan 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Имеются 2 таблицы account_login и user . в account_login лежат passwd и idUser. В user лежат email и idUser. С помощью запроса что ниже получается только вытащить для одного ID пасс и мыло.
    КАк сделать так чтоб для всей базы. ну или самому указать диапазон по 50к к примеру... и возможно ли сразу делать дамп. с шелла.??

    SELECT account_login.passwd as account_login,
    user.email as email FROM account_login,
    user WHERE account_login.idUser=ID AND user.idUser=account_login.idUser
     
    #1584 mistermar, 10 Jan 2012
    Last edited: 10 Jan 2012
  5. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Code:
    select a.idUser, a.passwd, b.email from account_login a
    inner join user b on b.idUser = a.idUser
    
     
  6. mistermar

    mistermar New Member

    Joined:
    5 Jan 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Cпасибо за ответ. другая проблема появилась..( загрузилось около 400к строк. (Опера тупила ппц.) а дальше просто остановилась... если запустить заново то результат не изменится. Можно ли с определенной строки (idUser) продолжить базу собирать... база на 2.8кк... или подскаижте чем 2 таблицы по 500мб можно на своем компе открыть.?
     
    #1586 mistermar, 12 Jan 2012
    Last edited: 12 Jan 2012
  7. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Ну так явно указать, откуда начинать выборку

    select a.idUser, a.passwd, b.email from account_login a
    inner join user b on b.idUser = a.idUser
    where a.idUser > [N]

    А зачем её на компе открывать? Сразу импортируй её в mysql, потом, например, через phpmyadmin смотри.

    Ну или блокнотом :)
     
  8. mistermar

    mistermar New Member

    Joined:
    5 Jan 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Ну так в браузере она не полностью открылась ) зависла и перестала прогружаться)) а как через hphmyadmin открыть .sql файл весом в 500мб?:) у меня там порог выставлен на 2 мб. больше не хочет). И спасибо за ответ.
     
  9. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Sypex Dumper поможет импортировать дамп большого размера
     
  10. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Не знаю где лучше спросить, тут или php. Задача такая - мне надо открыть таблицу, провести некоторые действия над всеми ее ячейками с помощью пхп функции, и назад записать Нужен алгоритм. Как я понимаю, сначала открыть, получить массив данных, обработать, записать. Код примерно такой:

    Code:
    $db = mysql_connect($mshost,$mslog,$mspas) or die (mysql_error());
    	mysql_select_db($msdb,$db);
    				
    		$sql = "SELECT * FROM `table_name` WHERE `id`=100"; //для отладки,1запись
    		$q = mysql_query($sql,$db);
    		$arr_data = mysql_fetch_row($q);
    ..далее обрабатываю массив arr_data . Теперь собственно вопрос - как мне записать этот массив именно туда, откуда он был взят? Т.е. в ту же самую строку в базе данных, чтобы данные оказались в тех же ячейках.
     
  11. trololoman96

    trololoman96 Elder - Старейшина

    Joined:
    1 Dec 2011
    Messages:
    120
    Likes Received:
    34
    Reputations:
    55
    http://phpclub.ru/mysql/doc/update.html
     
  12. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Спасибо, я знаю про UPDATE. Я не понимаю, как сделать, чтобы запись была в те же ячейки. Ну смотрите - я получаю с таблицы массив, там допустим Id=1,id_mess=23,id_user=еще чтото, ит ак далее. Провожу обработку над 2-3 полями (текстовые). Как мне их записать именно туда, откуда были взяты?
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Flisk если ID - первичный ключ, то обновление вы должны проводить для строки в с этим ID, имена столбцов совпадают с именами ключей в массиве. Что вам не понятного?
     
    _________________________
  14. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Gifts, там ид идут в разнобой, т.е. сначала 1, потом 8, потом допустим 35, и так далее. Но я решил уже, я читал построчно, ид сохранял в переменную, и в апдейте подставлял WHERE id=переменная с ид.
     
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Flisk простите что вы делали, только не говорите, что занимались издевательством над СУБД вида "Запрос LIMIT 1,1", "Запрос LIMIT 2,1" и т.д.?
     
    _________________________
  16. Flisk

    Flisk Member

    Joined:
    4 Aug 2010
    Messages:
    147
    Likes Received:
    8
    Reputations:
    -2
    Gifts, я делал чуть иначе, я сделал селект всей таблицы и читал построчно с помощью mysql_fetch_array, обрабатывал текущий массив, и опять писал в базу. Правильно это или нет, я хз, но работает.
     
    1 person likes this.
  17. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Нужна помощь в запросе, никак не соображу.

    Таблица категорий
    category:
    id name

    Таблица товаров
    items:
    id parent name

    Как выбрать запросом все категории + по 5 товаров этой категории?
    (items.parent = category.id)

    Т.е. что-то типа
    Code:
    SELECT a.*, b.* FROM category a
    LEFT JOIN items b ON b.parent = a.id AND b.id IN (SELECT id FROM items WHERE parent = a.id LIMIT 5)
    но с учётом того, что подзапросы не поддерживают limit.
     
  18. AppS

    AppS Member

    Joined:
    8 Aug 2009
    Messages:
    249
    Likes Received:
    25
    Reputations:
    6
    Вопрос со стоит в следующем, есть база. в базе есть таблица 'user'
    как не делаю всего БК таблицы, сделать БК определенного юзера, с его данными?
     
  19. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Как то криво вопрос поставлен.
    Может быть с помощью SQL-запроса, подобного этому:
    Code:
    SELECT * FROM user WHERE id=’1′;
     
  20. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Сам же отвечу на свой вопрос. Вышел из ситуации так
    Code:
    select a.id, a.name, b.name, b.parent, @i := a.id from category a
    inner join items b on b.id in (select * from(select id from items where parent = @i limit 5) t)
    order by a.id
    
     
Thread Status:
Not open for further replies.