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

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

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Плюс к дате:

    select adddate(curdate(),rownum) ddate from (select @r:=@r+1 rownum, t.* from (select @r:=0)a, information_schema.tables t where @r < datediff('2010-02-01','2010-01-10'))x

    минус к дате:

    select adddate(curdate(),-rownum) ddate from (select @r:=@r+1 rownum, t.* from (select @r:=0)a, information_schema.tables t where @r < datediff('2010-02-01','2010-01-10'))x

    Code:
    datediff('2010-02-01','2010-01-10')
    тут задается кол-во дней + требуется так называемая "большая таблица", в которой записей не меньше, чем кол-во дней, в пример взята information_schema.tables

    http://www.sql.ru/Forum/actualthread.aspx?tid=667216&hl=adddate
     
    1 person likes this.
  2. OdaN

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

    Joined:
    4 Mar 2006
    Messages:
    192
    Likes Received:
    17
    Reputations:
    1
    А возможно без больших таблиц?
    Считать rownum каким нибудь циклом, или вроде того?
    Ведь если мне понадобится посчитать до числа большего чем кол-во строк в "большой таблице" (она ведь не бесконечна), то будет ошибка...

    В любом случае спасибо и за это =)
     
    #1042 OdaN, 10 Mar 2010
    Last edited: 10 Mar 2010
  3. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    PHP:
    if($db->num_rows($db->query("SELECT * FROM users WHERE login='$_POST[login]';")) > 0) {
    echo 
    'login exists';
    exit;
    }
     
  4. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Давай всмотримся и вдумаемся в то, что ты написал.
    Итак, грубые приближения:
    1) ключевое слово WHERE... Оно одно, после него должен идти предикат;
    2) "id = 1 AND id = 2".Т.е. id одновременно должен быть равен и 1, и 2. Немного странно, неправда ли? Думаю уместнее будет дизъюнкция :)

    Учитывая вышеизложенное, можем составить запрос:
    Code:
    UPDATE table SET col=val WHERE id=1 OR id=2;
    Уже должно работать... Но выглядит как то странновато, не правда ли? Особенно на больших наборах данных. Для подобных ситуаций был придуман оператор IN:
    Code:
    UPDATE table SET col=val WHERE id IN(1,2)
     
    1 person likes this.
  5. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    Нужно соеденить поля кабинетов и поля должностей в таблице сотрудник.
    Подскаите плиз в чем ошибка?

    синтаксис еще плохо знаю...ругается на запятую :confused:
     
    #1045 InfectedM, 20 Mar 2010
    Last edited: 20 Mar 2010
  6. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,149
    Reputations:
    886
    поставь пробелы после запятых
     
    _________________________
  7. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    не помогло.
    ps mssql 2000
     
  8. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,149
    Reputations:
    886
    а какую именно ошибку выдает ?
     
    _________________________
  9. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    General SQL error Line1: Incorrect syntax near ','.
     
  10. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,149
    Reputations:
    886
    ты постил часть запроса,можешь весь запрос простит?
     
    _________________________
  11. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    одно поле объединяется,все ок:
    select *
    from sotrudnik left join kabinet on (kabinet.id_kabinet = sotrudnik.id_kabinet)

    Два поля не хочет почему-то...

    select * from sotrudnik
    left join (kabinet,dolzhnost) on
    (kabinet.id_kabinet = sotrudnik.id_kabinet AND dolzhnost.id_dolzhnost = sotrudnik.id_dolzhnost)

    думаю косяк в синтаксисе,не могу найти примеры двойные соединения нигде в нете ,не с чем сравнить(((
     
    #1051 InfectedM, 20 Mar 2010
    Last edited: 20 Mar 2010
  12. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,149
    Reputations:
    886
    может быть поможет...

    http://www.softmatics.ru/sql/1.htm

    http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=732371
     
    _________________________
  13. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    вопрос решен....

     
  14. Architek86

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

    Joined:
    20 Feb 2008
    Messages:
    80
    Likes Received:
    1
    Reputations:
    0
    Дана база пользователей (users) : userid, name, email
    Дана база их обьявлений (listings) : id, author (в этом поле содержиться userid автора), text, glamur, redcent, refresh
    Последние 3 поля (т.е. glamur, redcent, refresh) содержат либо 1, либо 0.

    Пытаюсь сделать статистику пользователей.
    Для этого делаю запрос mysq_query("SELECT * FROM users LIMIT 100"), т.е. вывожу к примеру первые 100 пользователей.
    Как можно усложнить запрос так, что бы он для каждого пользователя смотрел ВСЕ их обьявления в базе listings, и, если находит хотя бы одно обьявление с полем glamur, равным 1, то к данной строчке в результате запроса прибавляется это поле с его результатом, то же самое мне нужно и для redcent и для refresh.

    Т.е. я хотел бы, что бы было так:

    $q = mysql_query('тут некий волшебный запрос, который мне нужен');
    while($r=mysql_fetch_assoc){
    массив $r как минимум будет содержать:
    $r['userid'] == id пользователя
    $r['glamur'] == 1, если хоть одно его обьявление содержит поле glamur с 1, иначе 0
    $r['redcent'] и $r['refresh'] == аналогично как для glamur.
    }

    Как сделать так???
     
    #1054 Architek86, 27 Mar 2010
    Last edited: 27 Mar 2010
  15. SeNaP

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

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Сколько Мб может хранить бд MySQL на обычном виртуальном хостинге?
    Или у каждого хостера по своему?
     
  16. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    у каждого хостера по своему
     
  17. DeMoN_2009

    DeMoN_2009 Member

    Joined:
    1 Sep 2009
    Messages:
    12
    Likes Received:
    6
    Reputations:
    -6
    $stat=mysql_query("SELECT hp FROM qwerty");
    ошибка
    Resource id #4
    че не так?
     
  18. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    может
    SELECT `hp` FROM `qwerty` WHERE `id`=4 LIMIT 1

    или тебе нужны все записи? тогда
    SELECT `hp` FROM `qwerty` LIMIT 0,100500
    (100500 - сколько нужно)
     
  19. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Это не ошибка.
    mysql_query возвращает указатель на ресурс с результатом (собственно тот самый Resource id #4).
    Что бы получить сами данные, необходимо воспользоваться другими функциями. Почитай про:
    mysql_result
    mysql_fetch_array
    mysql_fetch_assoc
     
  20. DeMoN_2009

    DeMoN_2009 Member

    Joined:
    1 Sep 2009
    Messages:
    12
    Likes Received:
    6
    Reputations:
    -6
    VDShark
    ок)
     
Thread Status:
Not open for further replies.