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

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

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

    DwH New Member

    Joined:
    21 Feb 2012
    Messages:
    60
    Likes Received:
    2
    Reputations:
    0

    NOT IN работает очень долго, для таких целей и быстрой работы используй MINUS синтаксис лёгкий прочитай. Насчёт второго вопроса хочу узнать а как отличается используемый код от не используемого ?
     
  2. blesse

    blesse Member

    Joined:
    18 Jan 2012
    Messages:
    175
    Likes Received:
    8
    Reputations:
    1
    Запрос
    Code:
    SELECT number FROM `privtable` WHERE `num`='x' and `meta`=y
    Выводит столбец со значениями числовыми пример:
    1
    2
    3

    Нужно для каждого из них выполнить select * from `user` where `ID`='x'
    Где x это значения из 1 запроса т.е.
    select * from `user` where `ID`='1'
    select * from `user` where `ID`='2'
    select * from `user` where `ID`='3'

    Благодаря заранее!
     
  3. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    SELECT u.* FROM user AS u, privtable WHERE privtable.num='x' AND privtable.meta='y' AND u.ID=privtable.number
     
    #1843 Art!P, 12 Feb 2013
    Last edited: 12 Feb 2013
    1 person likes this.
  4. pro.ject

    pro.ject New Member

    Joined:
    10 Aug 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    спасиб,посмотрел про MINUS но этой функции не нашёл в mysql,
    только oracle. записей стало больше и горааздо медленее всё начало работать, пока разбил на 2 запроса и обработку на php.
    а на счёт кода, логика довольно странная) код всегда активен но может использоваться только у активного пользователя. т.е когда пользователь становится не активным код который он использовал можжет использовать следующий пользователь.
     
  5. DwH

    DwH New Member

    Joined:
    21 Feb 2012
    Messages:
    60
    Likes Received:
    2
    Reputations:
    0
    Да минуса нету можно использовать лефт джоин, а насчёт кодов было бы хорошо если бы вы помечали использованные коды каким нибудь флагом, что этот код используется если нет то можно его использовать.
     
  6. The46Doctor

    The46Doctor New Member

    Joined:
    31 May 2012
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    Есть таблица.
    id| user_id| text |
    1 8 y
    2 9 w
    3 20 q
    ...
    как получить все записи в которых user_id имеет максимальное значение?

    То есть запрос должен вывести:
    3 | 20 | q
     
  7. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75

    PHP:
    SELECT FROM `tableWHERE `id` = ( SELECT maxid FROM `table` )
     
  8. The46Doctor

    The46Doctor New Member

    Joined:
    31 May 2012
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    а без вложенного запроса возможно?
     
  9. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Так?
     
  10. The46Doctor

    The46Doctor New Member

    Joined:
    31 May 2012
    Messages:
    44
    Likes Received:
    0
    Reputations:
    0
    id| user_id| text |
    1 8 y
    2 9 w
    3 20 q
    4 14 k
    5 8 x

    уже не прокатит(
     
  11. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Code:
    SELECT * FROM `table` ORDER `user_id` DESC LIMIT 1
     
  12. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Такой вопрос. Имеется бд:

    id | num | uid
    1 | 2222 | 1
    2 | 2222 | 1
    3 | 3333 | 1
    4 | 3333 | 1
    5 | 4444 | 1

    uid может быть любым

    Мне нужно отсортировать по uid, где num=2222 OR 3333

    Результат должен быть следующим:

    id | num | uid
    1 | 2222 | 1
    2 | 3333 | 1
    3 | 4444 | 1

    Пробывал GROUP BY IF(`num `=2 OR `num `=10, `uid`, `id`), не помогло :( , т.к в случае одинакового uid выведет 2 строки

    id | num | uid
    1 | 2222(или 3333) | 1
    3 | 4444 | 1

    Подскажите пожалуйста запрос.
     
    #1852 restart_05, 18 Feb 2013
    Last edited: 18 Feb 2013
  13. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    попробуй IN.
    Code:
    WHERE `num` IN (2222,3333)
     
  14. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Немного не правильно поняли, мне нужно группировать их по uid где num=2222 OR 3333

    id | num | uid
    1 | 2222 | 1
    2 | 3333 | 1
    3 | 4444 | 1

    в вашем же случае выведет

    id | num | uid
    1 | 2222 | 1
    2 | 2222 | 1
    3 | 3333 | 1
    4 | 3333 | 1
     
  15. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Code:
    SELECT ... FROM ... WHERE `num` IN (222,333) GROUP BY `uid`
     
  16. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    А что с num = 4444 ??
     
  17. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Ну так добавь его в IN, и ставь вопрос конкретнее с самого начала.
     
  18. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Тогда он выведет одно значение
     
  19. DwH

    DwH New Member

    Joined:
    21 Feb 2012
    Messages:
    60
    Likes Received:
    2
    Reputations:
    0
    Может так пойдёт ?

     
  20. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Если у всех num'ов uid будет равен 1, то выведет 1 запрос
     
Thread Status:
Not open for further replies.