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

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

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

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Ага теперь вот такой вопрос:

    есть табличка:
    Code:
    CREATE TABLE `base` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `channel` char(255) NOT NULL,
      `country` char(255) NOT NULL,
      `rating` int(10) NOT NULL,
      `views` int(10) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    (1, 'Детский мир', '1', '0', '154' '1'),
    (1, 'Детский мир2', '3', '0', '154' '6'),
    (1, 'Детский мир3', '1', '0', '154' '12'),
    (1, 'Детский мир4', '2', '0', '154' '77'),
    (1, 'Детский мир5', '2', '0', '154' '1');
    и
    Code:
    CREATE TABLE `country` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `title_rus` char(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    (1, 'Албания'),
    (2, 'Эстония'),
    (3, 'Япония');
    Задача та же, из базы base выбрать 20 строчек с наибольшим рейтингом(rating) и полученное отсортировать по стане(title_rus) :confused:

    Помогите плиз :(
     
  2. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Есть таблица blabla с полями id,title
    запрос: select * from blabla Покажет их все.
    Мне же нужно вывести их все начиная с определенного id, чтобы нужный id выводился первым.
    Чтото вроде на выходе должно получится.
    (id = 4)
    4 - Четвертая
    1 - Первая
    2 - Вторая
    3 - Третья
    5 - Пятая
     
  3. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Короче ладно. 1 запросом не придумать чета.
    Сделал так:
    1 запросом вывожу по текущему id, воторым вывожу все что не равно этому id
     
  4. Neoveneficus

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

    Joined:
    10 Apr 2008
    Messages:
    235
    Likes Received:
    126
    Reputations:
    23
    SELECT * FROM `table` WHERE id = '4' union SELECT * FROM `table` WHERE id != '4'
     
    1 person likes this.
  5. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Спасибо, то что нужно
     
  6. bxN5

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

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    PHP:
       $delmysql_query("DELETE FROM `ban` WHERE `cnt` > `maxcount`") or die("Invalid query: " mysql_error()) ;
    `cnt` and `maxcount`имена столбцов в базе которые содержат значения
    дело в том что он удаляет как то совершенно рандомно и понятно только ему как он удаляет записи, причем условию они могут как соответствовать так и не соответствовать
    или же
    SELECT id FROM bann WHERE `cnt` >= `maxcount`
    тоже возвращает рандомные айдишники =\
     
  7. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    А какие значения у cnt и maxcount
     
  8. bxN5

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

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    интовые
    [​IMG]
     
  9. Architek86

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

    Joined:
    20 Feb 2008
    Messages:
    80
    Likes Received:
    1
    Reputations:
    0
    Даны две таблицы: tbl1 и tbl2.
    tbl1: содержит id, name
    tbl2: содержит id (которое связано с id предыдущей таблицы), work
    Как выполнить select всех записей, что бы каждая возвращённая строка содержала id, name, work и причём без нарушения связи, т.е. work соответствовал id. Пробовал в where ставить условие tbl1.id = tbl2.id, но по-моему, что то не так.. И + надо отсортировать ответ по name, к примеру.
     
  10. zavra

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

    Joined:
    12 Mar 2008
    Messages:
    87
    Likes Received:
    48
    Reputations:
    23
    привет! наверняка многие играли в покер вконтакте, там каждый день дается по рандомной сумме голосов. я хочу для своей игры сделать тоже самое, т.е. создать bool колонку "получен ли дневной бонус". в 12 часов ночи он ставится на false, а как только игрок получает его, становится true. так вот вопрос: можно это сделать как-то настройками mysql, или каждый день надо запускать пхп-скрипт, который все бы отмечал на false?
     
  11. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Architek86
    Code:
    SELECT t1.id, t1.name, t2.work 
    FROM tbl1 t1
    LEFT JOIN tbl2 t2 USING (id)
    ORDER BY t1.name
    
     
  12. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    Помогите пожалуйста, есть таблица вида date|name
    Колонка date содержит даты вида "2009-08-11 17:59:47",
    Как построить запрос, чтобы выводить результаты допустим за последние 6 часов.
     
  13. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    Ответ нашёл сам. WHERE UNIX_TIMESTAMP(date) > НУЖНОЕ ВРЕМЯ в UNIX ФОРМАТЕ
     
  14. FewG

    FewG Member

    Joined:
    25 Dec 2009
    Messages:
    136
    Likes Received:
    12
    Reputations:
    0
    Есть такой вопрос, имееться логин и пароль к бд, известен хост (ип-адрес), в бд я создаю пользователя (админа) со всеми правами:

    Code:
    GRANT ALL PRIVILEGES ON *.* TO USER@"%" IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
    Пробую подключиться при помощи Navicat с другого компьютера, не работает. В чем может быть дело?
     
  15. vorona

    vorona Member

    Joined:
    7 Sep 2009
    Messages:
    392
    Likes Received:
    7
    Reputations:
    1
    CREATE TABLE `ocenki` (
    `num` INT NOT NULL AUTO_INCREMENT ,
    `art` INT NOT NULL ,
    `user` VARCHAR NOT NULL ,
    `oc` SMALLINT NOT NULL ,
    PRIMARY KEY ( `num` ) ,
    INDEX ( `art` )
    )

    Ответ MySQL:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL, `oc` SMALLINT NOT NULL, PRIMARY KEY (`num`), INDEX (`art`))' at line 1

    Что не так?
     
  16. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    в этой строке:

    `user` VARCHAR NOT NULL ,

    нужно указать длину поля, т.е. например так:

    `user` VARCHAR(20) NOT NULL ,

    т.к. int и smallint имеют дефолтную длину, если такова не указана вручную, в отличие от VARCHAR
     
  17. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Полно вариантов, особено в никсах, но мне по душе скриптом такие вещи делать - без предварительного дампа, без зависимости от системы и бла-бла-бла

    PHP:
    <pre>
    <?php
    $dbname 
    'instant'# Имя БД
    $prefix 'vobla_'# Желаемый префикс 
    $link mysql_connect("localhost""root""root"); # Хост, юзер, пароль
    $query "SHOW TABLES FROM " $dbname;
    mysql_select_db($dbname);
    $result mysql_query($query,$link);
    while (
    $table mysql_fetch_array($result)) {
       
    $new mysql_query ("ALTER TABLE `" $table[0]. "` RENAME `" $prefix $table['0'] . "`"$link);
       print 
    $table[0] . " ---> " .  $prefix $table['0'] . "\n";
    }
    mysql_close($link); 
    print 
    "Замена произведена \n";
    ?>
    </pre>
    Скуль запросом чтобы такое сделать (одним) - хз
     
    #937 Pashkela, 5 Jan 2010
    Last edited: 5 Jan 2010
    1 person likes this.
  18. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Или еще один способ, чисто через phpmyadmin, аналогов не видел:

    1. phpmyadmin->выбираем БД->SQL
    2. Выполняем такой запрос:

    SELECT CONCAT(CONCAT('ALTER TABLE ', table_name),CONCAT(' RENAME ', CONCAT('pref_', table_name, ';'))) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='instant' LIMIT 0 , 100;

    где "pref_" - нужный префикс, в LIMIT указываем кол-во таблиц для изменения, "instant" - имя БД, в которой мы хотим добавить префикс к таблицам. В результате получим текст sql-запроса, который останется только скопировать и выполнить:

    [​IMG]

    т.е. полученный текст копируем, опять лезем в SQL, вставляем, выполняем, всё.

    PS: Можно вывести в файл и потом копировать оттуда
     
    #938 Pashkela, 5 Jan 2010
    Last edited: 5 Jan 2010
  19. REBUUS

    REBUUS Active Member

    Joined:
    6 Apr 2009
    Messages:
    314
    Likes Received:
    111
    Reputations:
    9
    какой самый быстрый способ выбора последних n строк с таблице , в том же порядке в котором идут, длю удобства есть id (auto inc)
     
  20. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    select * from table order by id DESC limit n,m
     
    #940 Pashkela, 5 Jan 2010
    Last edited: 5 Jan 2010
Thread Status:
Not open for further replies.