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

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

Thread Status:
Not open for further replies.
  1. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Это самая главная таблица в проекте, разумеется что они не будут лежать как логи
     
  2. dos999

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

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    1НTL всё будет нормально, 50 столбцов это не критично. просто без надобности в селектах не выводи все столбцы(select *).
     
  3. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как дописать текст во всех строках (varchar)?
    Что то подобное как на PHP:
    PHP:
    $s.='тест';
    $s=$s.'тест';
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    update `phpbb_users` set username=concat(username,'ololo')
     
    1 person likes this.
  5. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    HTL, вот так

    update table set colName = concat(colName, 'test')
     
    1 person likes this.
  6. SirkO_UA

    SirkO_UA New Member

    Joined:
    6 Jun 2010
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    обьясните пж про атрибуты UNSIGNED ZEROFILL (в MySQL) или дайте ссылку где можно почитать про это...
     
    #1186 SirkO_UA, 10 Jul 2010
    Last edited: 10 Jul 2010
  7. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Пример.
    Code:
    mysql> CREATE TABLE `zf` (`i` INT(5), `iz` INT(5) ZEROFILL, `iuz` INT(7) ZEROFILL);
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> INSERT INTO `zf` VALUES (1, 2, 3), (11, 22, 33), (111, 222, 333), (1, -2, -3);
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> select * from zf;
    +------+-------+---------+
    | i    | iz    | iuz     |
    +------+-------+---------+
    |    1 | 00002 | 0000003 | 
    |   11 | 00022 | 0000033 | 
    |  111 | 00222 | 0000333 | 
    |    1 | 00000 | 0000000 | 
    +------+-------+---------+
    4 rows in set (0.00 sec)
    
     
    #1187 krypt3r, 10 Jul 2010
    Last edited: 10 Jul 2010
  8. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    В БД структура столбца "int(9)", как я думал это обозначает максимальную длину цифры (т.е. 999999999)
    Но у меня в БД появилась запись где этот столбец равен 1000000000
    Как это может быть? И как это исправить чтобы это число было только < 1000000000?
     
  9. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    :D надо не думать, а маны читать, потом думать. Перед записью в таблицу проверяйте значение
     
  10. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    Че это за кал "#1273 - Unknown collation: '' "?
    Импортирую дамп БД от воблы ч/з PHPMyAdmin. дамп весит около 15 МБ, но в PHP установлен гораздо больший лимит. Раньше эту базу от этого проекта спокойно импортировал на другом хосте.
     
    _________________________
  11. emillord

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

    Joined:
    20 Jan 2008
    Messages:
    257
    Likes Received:
    444
    Reputations:
    255
    почитай тут -
    Click
     
  12. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    Спасибо, но последний пост там:
    Так как же ее установить?
    Хотя, вроде, сайт итак работает, просто, небось, не до конца.
     
    _________________________
  13. emillord

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

    Joined:
    20 Jan 2008
    Messages:
    257
    Likes Received:
    444
    Reputations:
    255
    Я с таким не сталкивался, но предположу что в дампе надо прописать подобно вот такому:
    Code:
    CREATE TABLE `table_name` (
      `id` int(11) NOT NULL default '0',
      `a` int(2) NOT NULL default '0',
      `b` int(2) NOT NULL default '0',
      `c` int(2) NOT NULL default '0',
      `d` int(2) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM [B]DEFAULT CHARSET=cp1251[/B];
     
  14. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    У меня там написано Latin1 вместо cp1251. Просто сделать замену, да?
     
    _________________________
  15. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    Поменял. Не помогло.
     
    _________________________
  16. Spot

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

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Здравствуй %username%!
    У меня возникла проблема при составлении запроса в бд,вот код:
    Code:
    declare @i 
    int set @i = 1 while(@i != 0)
    begin  update dbo.TEILNEHMER  set Rechnungssumme= isnull((select count(*)*100  from dbo.TEILNEHMER t
    join dbo.VeranstaltungsTeilnahme vt on t.teilnehmer_id=vt.teilnehmer_id
    join dbo.VERANSTALTUNG v on vt.veranstaltung_id=v.veranstaltung_id group by t.teilnehmer_id,typ having typ='Workshop' and t.teilnehmer_id = @i),0)
    where teilnehmer_id = @i
    if (t.teilnehmer_id  is Null) 
    then @i=0  
    else  set @i = @i + 1 
    end if; 
    end 
    Проблема возникает с if оператором,пишет что проблема с синтаксом и подчёркивает
    t.teilnehmer_id .

    Рад любой помощи :)
     
  17. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    значение колонки t.teilnehmer_id вам нужно поместить в переменную и затем юзать в ифе. В TSQL нет IF/THEN, есть
    Code:
    IF (cond)
      ' один оператор
    ELSE
      ' один оператор
    
    IF (cond2)
    BEGIN
      ' несколько операторов
    END
    ELSE
    BEGIN
      ' несколько операторов
    END
    
     
  18. Spot

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

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Спасибо krypt3r, буду знать,к сожаление нужно было как можно быстрее регить вопрос,поэтому пошёл по методу ненормативного кода и вот что вышло
    Code:
    go declare @i int set @i = 1 declare @j int set @j=0  while(@i !=0 ) begin   set @j=(Select (select count(distinct(day(datum))) from dbo.VERANSTALTUNG v join dbo.VeranstaltungsTeilnahme vt on v.veranstaltung_id = vt.veranstaltung_id join dbo.Teilnehmer t on t.teilnehmer_id = vt.teilnehmer_id where t.teilnehmer_id=@i and typ !='Workshop'))  update dbo.TEILNEHMER  set Rechnungssumme= case  when @j=1 then 300 when @j=2 then 600 when @j=3 then 800 else 0 end  +  isnull((select count(*)*100  from dbo.TEILNEHMER t join dbo.VeranstaltungsTeilnahme vt on t.teilnehmer_id=vt.teilnehmer_id join dbo.VERANSTALTUNG v on vt.veranstaltung_id=v.veranstaltung_id group by t.teilnehmer_id,typ having typ='Workshop' and t.teilnehmer_id = @i),0)   where teilnehmer_id =@i  set @i = @i + 1 if (select teilnehmer_id =@i from dbo.TEILNEHMER where teilnehmer_id = @i) is null set @i=0  end;

    Переписал с подачи Вашей подсказке,и всё заработало,но уже к сожалению прийдёться оставить тот кусок кода.
    С меня плюс.
     
  19. Seravin

    Seravin Active Member

    Joined:
    25 Nov 2009
    Messages:
    475
    Likes Received:
    190
    Reputations:
    221
    помогите написать по человечески) знаю что извращенец)
    Code:
    (select catname from category where id='".$db->secure($_GET['pid'])."'),
    (select catname from category where id=(select pid from category where id='".$db->secure($_GET['pid'])."')),
    (select catname from category where id=(select pid from category where id=(select pid from category where id='".$db->secure($_GET['pid'])."'))),
    (select catname from category where id=(select pid from category where id=(select pid from category where id=(select pid from category where id='".$db->secure($_GET['pid'])."'))))
    
    с join просто проблемы есть небольшие.

    таблица id pid catname

    таблица в виде дерева(Gifts ты в теме на тебя большая надежда)

    надо получить catname каждого уровня(pid отвечает за id родителя)
     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Seravin Правда не уверен какие индексы нужно использовать
    Code:
    SELECT a.catname, b.catname, c.catname, d.catname FROM category a LEFT JOIN category b ON a.id=b.pid LEFT JOIN category c ON b.id=c.pid LEFT JOIN category d ON c.id=d.pid WHERE a.id = 1;
    Поправка насчет индексов - достаточно PRIMARY на столбце ID и cоставного на PID, ID

    Если нужно выводить столбцы со всеми уровнями вложенности, то можно добавить условие "AND d IS NOT NULL"
     
    _________________________
    #1200 Gifts, 7 Aug 2010
    Last edited: 7 Aug 2010
    1 person likes this.
Thread Status:
Not open for further replies.