вопрос про запрос в Mssql

Discussion in 'PHP' started by ShAnKaR, 24 Oct 2007.

  1. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    как вывести в одну строчку данные из нескольких запросов:
    тоесть я понимаю что можно так:
    но можно както сократить чтоб базе меньше напряга было?
    PS запросы все одинаковые меняется только ID. спасибо.
     
  2. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    можно сделать так к примеру
    Code:
    select name from tabl where id=1 or id=2 or id=3
     
  3. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    select name from tabl where id=1 and id=2 and id=3
     
  4. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    что именно тебе надо? если ты хочешь вывести все где разные ид то сделай
    или тебе ножно это все вернуть в одной строке?

    и насчет ид они ограничены или тебе нужны все?
     
    _________________________
  5. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    =) если все то
    select name from tabl =)
    да поясни маску по которой должны выводиться запросы.
     
  6. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    так запрос ничего не найдет, id же не может сразу три значения принимать нужно делать через or
     
  7. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    нет вы непоняли вот посмотрите что делает запрос который я привел- он не выводит несколько рядов! он выводит один ряд. просто меня интересует можно ли както менее нагружать сервер чтоб вывести тиа того кк если б было select name from tabl where id=1 or id=2 or id=3 потом те записи которые выдает этот запрос пихались в одну строчку и выводились как результат.
     
  8. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    Проще ты никак не сделаешь, чтобы менее нагружать базу и не делать кучу идентичных запросов, лучше сделать один а там его уже просто правильно обработать и подать ответ на экран в том виде каком надо, но обрабатывать нужно уже не средствами mssql.
     
  9. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    а средствами mssql ни как нельзя?
     
  10. ant0ha

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

    Joined:
    22 May 2007
    Messages:
    130
    Likes Received:
    50
    Reputations:
    13
    нет, это же чисто база данных

    ЗЫ: я чегото недопер как у тебя это работает
    Code:
    select (select name from tabl where id=1)+(select name from tabl where id=2)+(select name from tabl where id=3)
    в результате этого запроса должен же 0 получиться, + ведь это арифметическое сложение =)
     
  11. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    В mssql + выполняет конкатенацию :)
     
  12. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    если тип name не int то конкатенация иначе как ты скзал сложение.

    ну просто думал мож есть всетаки какаянить функция работы с такой фигней типа как с массивом. видимо нету (
     
    1 person likes this.
  13. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Впринципе СУБД особого напряга от такого и нет, если мы говорим о стандартных СУБД работающих с жестким диском (а мы о них и говорим, так как mssql ей является :) ) а не о новомодных СУБД, в основном размещающих данные в оперативке :)
    А дело тут вот в чем.​
    Основные временные затраты связаны с дисковыми операциями. При запросе какой-либо записи, эта запись ищется на диске, и считывается не одна эта запись а страница (обычно даже несколько страниц), которая размещается в оперативке​
    (прим. Страницей называется минимальная порция данных, считываемых с диска за одну дисковую операцию. В mssql, если мне не изменяет память, страница в стандарте равна 8 кб).​
    И вот - дальше уже работа идет не с диском, а с оперативной памятью. То бишь если твои записи, которые ты вибыраешь были соседними (в пределах одной страницы например) - обращений к диску больше не будет, и на скорости/нагрузке это практически не скажется.​
     
    #13 VDShark, 25 Oct 2007
    Last edited: 25 Oct 2007
    3 people like this.