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

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

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

    Contik New Member

    Joined:
    30 Oct 2010
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    Ребят очень нужна помощь! Как сделать уникальное поле в mysql?

    Например в access просто указываешь Индексированное поле (Да, совпадения не допускаются) и бд не позволить делать дубли. А Как быть в mysql? Как сделать чтобы Mysql не позволяла добавлять дубли?

    Формат поля - text. Записей будет десятки миллионов. Если нет такой возможности, то подскажите как эффективно сделать
     
  2. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Так а если все вынести в отдельную таблицу, там сделать
    Code:
    text_id INT UNSIGNED AUTO_INCREMENT,
    text_content TEXT,
    PRIMARY_KEY(text_id)
    и все.
     
  3. Contik

    Contik New Member

    Joined:
    30 Oct 2010
    Messages:
    16
    Likes Received:
    2
    Reputations:
    0
    если четно не понял зачем так мудрить
    вообщем сделал varchar UNIQUE KEY

    Вопрос к спецам, что кошернее сделать:

    программную проверку на уникальность поля при добавлении записи или использования уникального ключа в таблице?
     
  4. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    PRIMARY или UNIQUE KEY. При добавлении INSERT INTO ... ON DUPLICATE KEY UPDATE... Попробуйте так
     
  5. Todin

    Todin Member

    Joined:
    28 Jan 2011
    Messages:
    47
    Likes Received:
    7
    Reputations:
    0
    Contik,я тоже задавался этим вопросом
    для себя решил что лучше использовать уникальный ключ в таблице, потому что программная проверка сводиться к 1-2 действиям. Найти совпадения, если не нашли вставить запись.

    Если же сделать уникальное поле, то все сводиться к INSERT IGNORE

    P.S. таблицы с фиксированным размером строки обрабатываются шустрее
     
  6. Gelman

    Gelman New Member

    Joined:
    27 Sep 2011
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    как можно оптимизировать вот эти запросы

    [1] => 0.000988006591797 [SELECT * FROM bans WHERE 782567033 >= first AND 782567033 <= last]
    [2] => 0.0012218952179 [SELECT * FROM users WHERE id = 1]
    [3] => 0.000285863876343 [UPDATE users SET last_access = '2011-12-10 02:53:56' WHERE id = 1]
    [4] => 0.000401020050049 [UPDATE sessions SET sid = 'b5c206455b6c7fc416861e83ef19dcaa', uid = 1, username = 'Gelman', class = 7, ip = '46.165.6.121', time = 1323474836, url = '/index.php', useragent = 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.60' WHERE sid = 'b5c206455b6c7fc416861e83ef19dcaa']
    [5] => 0.000308036804199 [SELECT * FROM siteonline]
    [6] => 0.000298023223877 [SELECT COUNT(*) FROM messages WHERE receiver=1 AND location=1]
    [7] => 0.000309944152832 [SELECT COUNT(*) FROM messages WHERE sender=1 AND saved='yes']
    [8] => 0.000602960586548 [SELECT COUNT(*) FROM peers WHERE userid=1 AND seeder='yes']
    [9] => 0.000150203704834 [SELECT COUNT(*) FROM peers WHERE userid=1 AND seeder='no']
    [10] => 0.000571012496948 [SELECT * FROM orbital_blocks WHERE active = 1 ORDER BY weight ASC]
    [11] => 0.000638008117676 [SELECT id, class, username FROM users WHERE nagrada1 = 'yes' OR nagrada2 = 'yes' OR nagrada3 = 'yes' OR nagrada4 = 'yes' OR nagrada5 = 'yes' OR nagrada6 = 'yes' OR nagrada7 = 'yes' OR nagrada8 = 'yes' OR nagrada9 = 'yes' OR nagrada10 = 'yes' ORDER BY bonus]
    [12] => 0.000460147857666 [SELECT * FROM users WHERE id=6]
    [13] => 0.00121998786926 [SELECT * FROM users WHERE id=172]
    [14] => 0.000923156738281 [SELECT * FROM users WHERE id=1]
    [15] => 0.000979900360107 [SELECT * FROM users WHERE id=7]
    [16] => 0.000275135040283 [SELECT `id`, `body`, `subject`, `added`, `uid`, `uname`, `checker`, `comments` FROM news WHERE checker='yes' ORDER BY added DESC LIMIT 3]
    [17] => 0.000334024429321 [SELECT id,type,question,start,exp FROM polls ORDER BY id DESC LIMIT 1]
    [18] => 0.000249147415161 [SELECT sid FROM polls_votes WHERE user=1 AND pid=4]
    [19] => 0.000195980072021 [SELECT id,value FROM polls_structure WHERE pollid=4]
    [20] => 0.000157117843628 [SELECT vid FROM polls_votes WHERE sid=1]
    [21] => 0.000137090682983 [SELECT vid FROM polls_votes WHERE sid=2]
    [22] => 0.000179052352905 [SELECT vid FROM polls_votes WHERE sid=3]
    [23] => 0.000180959701538 [SELECT vid FROM polls_votes WHERE sid=4]
    [24] => 0.000258922576904 [SELECT * FROM notes WHERE owner = 1 LIMIT 1]
    [25] => 0.000254154205322 [SELECT COUNT(*) FROM torrents ]
    [26] => 0.0027129650116 [SELECT id, name, torrents. * FROM torrents ORDER BY added DESC LIMIT 0,9]
    [27] => 0.00166821479797 [SELECT id, username FROM users WHERE status='confirmed' ORDER BY id DESC LIMIT 1]
    [28] => 0.000267028808594 [SELECT s.uid, s.username, s.class FROM sessions AS s WHERE s.time > 1323474536 GROUP BY s.username ORDER BY s.class DESC]
    [29] => 0.000227212905884 [SELECT * FROM logger_texts WHERE date >= '2011-12-09 02:53:56' ORDER BY count_torrents DESC]
     
  7. НTL

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

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    В чем отличие:
    от
    Желательно очень подробно
     
  8. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Допустим у тебя в поле есть
    и
    %Str% ищет либое вхождение Str будь оно в начале, середине или в конце поля.
    Str ищет только Str
     
    1 person likes this.
  9. НTL

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

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Тогда в чем разница между "LIKE" и "="? Колонка типа "Текст"
     
  10. шёпот

    шёпот New Member

    Joined:
    8 Jan 2011
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    Почему не работает ?

    CREATE TABLE Student
    (
    Kod_stud integer NOT NULL,
    Fam char (30) NOT NULL ,
    Adres char (50),
    Ball decimal,

    INSERT Student (Kod_stud, Fam) VALUES (’1′,’165′,’0′,’name’)

    );
     
  11. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    INSERT INTO Student (Kod_stud, Fam) VALUES (’1′,’165′,’0′,’name’)

    1) Пропущено слово INTO
    2) Ты перечислил 2 поля (Kod_stud, Fam) куда вставлять данные, а передаешь аж целых 4 (’1′,’165′,’0′,’name’)
    3) Создай сначала таблицу с помощью CREATE TABLE, а потом уже заполняй данными с помощью INSERT INTO, честно говоря не знаю можно ли так писать как у тебя, INSERT внутри CREATE TABLE, но сделай лучше как 100 % можно, сначала создай, потом заполняй.
     
  12. НTL

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

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Есть 2 столбца text и md5, нужно:
    1) Условно сгруппировать записи по md5
    2) Если в одной из получившихся групп поля text разные (Даже по регистру)
    3) Выдать только эту группу

    Таблица 1,6кк записей, 500mb весов

    Как все это реализовать? На чистом MySQL
     
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    НTL
    Code:
    SELECT a.`text`, b.`text`, a.md5 FROM `table` a INNER JOIN `table` b ON a.md5=b.md5 WHERE a.`text`!=b.`text` LIMIT 1
     
    _________________________
  14. AppS

    AppS Member

    Joined:
    8 Aug 2009
    Messages:
    249
    Likes Received:
    25
    Reputations:
    6
    Суть вопроса такая.
    Есть база, в база есть таблица новостей, новостей там 100500.
    Как создать запрос, который бы в каждую новость дописывал слово/картинку/данные, в самое начало?
    Заранее спасиб)
     
  15. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Мускуль?
    Code:
    UPDATE `news` SET `novost` = CONCAT('что-то дописать в начало', `novost`);
    
     
  16. AppS

    AppS Member

    Joined:
    8 Aug 2009
    Messages:
    249
    Likes Received:
    25
    Reputations:
    6
    Да mysql, тут понял

    а если их 1000шт он этим запросом он поставить везде?

    ТАк получаеться? =)
     
  17. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Да, это во всей таблице. Если нужно, добавляйте условие WHERE. Учтите, что текст в начале каждой новости будет одним и тем же
     
  18. AppS

    AppS Member

    Joined:
    8 Aug 2009
    Messages:
    249
    Likes Received:
    25
    Reputations:
    6
    Дада мне так и надо, ток проблема, я вставляю туда html код, а он ток по половине;(
    сначало последнию половину вставляешь а потом начал ;(
     
  19. mistermar

    mistermar New Member

    Joined:
    5 Jan 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    подскажите как сотставить запрос для одной бд. есть 2 таблицы. " log" и "user". в таблице "Log" есть столбец "ID" и "Pass" а в таблице USer "ID" и "mail". подскажите как соместить в 1 запрос. чтоб вывести одим рузультатом. ID mail pass. ключем будет ID. ( нужно чтоб ID был в обеих базах.)
     
  20. al-chemist

    al-chemist Member

    Joined:
    24 Sep 2011
    Messages:
    16
    Likes Received:
    20
    Reputations:
    0
    Видимо, как-то так:
    SELECT log.pass as pass, user.mail as mail FROM log, user WHERE log.id=ID AND user.id=log.id
    (ID здесь - параметр запроса)
     
Thread Status:
Not open for further replies.