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

Discussion in 'PHP' started by Kaimi, 7 May 2015.

  1. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    _________________________
  2. Jet

    Jet New Member

    Joined:
    5 Jul 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    в таблицу mysql нужно добавлять записи, есть колонка u_id
    нужно при каждом добавлении добавлять уникальный u_id типа x3w9 к каждой записи

    u_id от 4 символов, a-Z 0-9 (по мере заполнения всех 4 символьных вариаций - переход к 5 символьным и т.д.)

    Подскажите как реализовать? я понимаю можно заранее генерировать и проверять существование, если существует - опять генерировать, далее опять проверять существование - но допустим когда почти все 4 символьные вариации начнут заканчиваться - то получается повторных проверок может быть тысячи и как избежать этого и как понять что закончились 4 символьные вариации и перейти к 5 символам?

    вообще что мне нужно - есть каталог на сайте, id идут по возрастанию - 1229 - 1230 - 1231 и т.д.
    мне нужно скрыть это возрастание и получить скрытые id типа x3w9 j29f 0use
     
  3. DiabloZet

    DiabloZet New Member

    Joined:
    23 Sep 2015
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Думаю можно заранее рассчитать количество возможных вариаций, если превысит то повышаем на 1 значение...
    Ну а насчет проверки думаю тут тебе ничего не поможет, скрипту по любому придется создать тысячи вариаций и проверить их сходство...
     
  4. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    PHP:
    select posts.*, count(*) as count_pic from posts
    LEFT JOIN  images ON posts
    .id images.post_id
    group by posts
    .id
    limit 1 
    100;
    /* Affected rows: 0  Найденные строки: 224  Предупреждения: 0  Длительность  1 query: 3,120 sec. */
    Помогите плиз оптимизировать запрос.

    Нужно показать сколько есть картинок у каждого поста + все содержимое постов

    Лагает из за того, то группировка происходит по всем постам, а потом уже из них берутся первые 100.
    Как сначала взять первые 100 а потом уже по ним группировать?
     
  5. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    Еще заметил такую штуку, если выполнять один и тот же запрос 2 раза, то на второй раз он выполняется за миллисекунду.
    /* Affected rows: 0 Найденные строки: 224 Предупреждения: 0 Длительность 1 query: 0,000 sec. */
    Это как я понял индексы отрабатывают?
     
  6. Waki

    Waki Member

    Joined:
    9 Oct 2015
    Messages:
    55
    Likes Received:
    31
    Reputations:
    10
    структуру таблиц показал был, а вообще так попробуй
    Code:
    select posts.*, (select count(*) from images where post_id=p.id) as count_pic
    from posts p
    limit 1 , 100;
    
    думаю из-за кэша
     
    InfectedM likes this.
  7. Sanic1977

    Sanic1977 Banned

    Joined:
    29 Oct 2008
    Messages:
    98
    Likes Received:
    6
    Reputations:
    0
    Есть две таблицы с данными:

    Tabl1: form_sub
    id|clientID|formID|form_fieldID| answer|subID
    --------+---- -+------+------------+---------+-----
    16753755| 532| 2456| 46259| User852| 1183
    16753757| 532| 2456| 46260| 749| 1183
    16753759| 532| 2456| 46258|Ivanov I.I.| 1183
    16753761| 532| 2456| 46257| Address| 1183
    16753763| 532| 2456| 46256| Moscow| 1183
    16753765| 532| 2456| 46255|[email protected]|1183
    16753767| 532| 2456| 46254| 10.00| 1183
    16753769| 532| 2456| 46252| Users| 1183
    16753771| 532| 2456| 46251|+798271880| 1183
    16753775| 532| 2456| 46262| Hello!| 1183


    Tabl2: form_fields
    id| field_name|formID|clientID
    -----+---------------+------+-------
    46251|User TelNumber| 2456|532
    46252| User Type| 2456|532
    46254| User Balance| 2456|532
    46255| User E-Mail| 2456|532
    46256| User Region| 2456|532
    46257| User Address| 2456|532
    46258| User FIO| 2456|532
    46259| User Login| 2456|532
    46260|User AccNumber| 2456|532
    46262| User Comments| 2456|532

    form_sub.form_fieldID = form_fields.id

    Как сформировать запрос, что получить строку вида:
    subID:1183|User Login:User852|User AccNumber:749|User Type:Users|User Balance:10.00|User TelNumber:+79827412880| и т.д.|
     
  8. fed0r0vich

    fed0r0vich New Member

    Joined:
    28 Oct 2015
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Сейчас попробую сделать, новичек в программировании и набираюсь опыта)
     
  9. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    Code:
    SELECT *
    FROM `form_sub` as t1
    INNER JOIN `form_fields` as t2
    ON t1.`form_fieldID` = t2.`id`
     
  10. madam

    madam Member

    Joined:
    27 Mar 2014
    Messages:
    134
    Likes Received:
    5
    Reputations:
    1
    Подскажите пожалуйста,есть таблица 'product'

    id int(7)
    uid int(7)
    amout int(7)
    price double(10,4)

    id uid amout price
    9 1 50006 10.2007
    10 11 456 14.0406
    11 4 10000 12.0000
    12 12 4322 10.2007
    13 1 30000 20.0000

    сейчас они у меня выводятся так

    количество по цене
    50006 10.2007 +
    456 14.0406
    10000 12.0000
    4322 10.2007 +
    30000 20.0000

    как вывести так,чтобы количество суммировалось если цена одинакова

    количество по цене
    54328 10.2007
    456 14.0406
    10000 12.0000
    30000 20.0000

    через group by пробовала,увы не получается
     
  11. Waki

    Waki Member

    Joined:
    9 Oct 2015
    Messages:
    55
    Likes Received:
    31
    Reputations:
    10
    что-то вроде такого
    Code:
    select price, sum(amount) as sum_amount
    from product 
    group by price
    
     
  12. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    покажи, как пробовал
     
  13. Грабитель

    Joined:
    5 Mar 2013
    Messages:
    196
    Likes Received:
    12
    Reputations:
    -7
    в mysql есть функция eval(), кто нибудь может показать пример запроса с этой функцией?
    В гугле нету совершено никакой информации, начиная с какой версии эта функция появилась, и как её вообще выполнять.
    Предполагаю, что как то так: select eval('select version()') или же просто eval('select version()') но ни то ни другое не работает.
    Кто в курсе, объясните, пожалуйста.
     
  14. Waki

    Waki Member

    Joined:
    9 Oct 2015
    Messages:
    55
    Likes Received:
    31
    Reputations:
    10
    нет eval в mysql
     
    Грабитель likes this.
  15. dondy

    dondy Member

    Joined:
    5 Jun 2015
    Messages:
    560
    Likes Received:
    61
    Reputations:
    5
    хочу добавить id для базы, её создавал без id
    как это можно сделать не удаляя её содержимое ?

    и что будет, когда есть Id, и удалить строки из бд ? каким образом id переформируются ?
     
  16. Waki

    Waki Member

    Joined:
    9 Oct 2015
    Messages:
    55
    Likes Received:
    31
    Reputations:
    10
    Code:
    ALTER TABLE table_name ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    
    Если требуется восстановить порядок нумерации после удаления, можно сделать так
    Code:
    ALTER TABLE table_name DROP `id`;
    ALTER TABLE table_name AUTO_INCREMENT = 1;
    ALTER TABLE table_name ADD `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
    
     
    banned, GAiN and dondy like this.
  17. ykimyraa

    ykimyraa New Member

    Joined:
    2 May 2016
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Попробуйте без внешнего объединения
     
  18. maximum000

    maximum000 New Member

    Joined:
    26 Nov 2016
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Подскажите, есть запрос к БД
    $wallet=substr($db->getOne("SELECT wallet FROM `ss_users` WHERE id=?i",$deposits['userid']), 0, -3);
    мне надо добавить таблицу например ss_usersbot, делаю так
    $wallet=substr($db->getOne("SELECT wallet FROM `ss_users`, `ss_usersbot`WHERE id=?i",$deposits['userid']), 0, -3);
    Понимаю что не правильно, а как составить запрос что-бы работало?
     
  19. lifescore

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

    Joined:
    27 Aug 2011
    Messages:
    651
    Likes Received:
    510
    Reputations:
    72
    http://www.w3schools.com/sql/sql_select.asp

    http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_columns
     
  20. maximum000

    maximum000 New Member

    Joined:
    26 Nov 2016
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0