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

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

Thread Status:
Not open for further replies.
  1. Димитрий

    Димитрий New Member

    Joined:
    30 Aug 2008
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    В общем у меня есть таблица, в ней колонка с цифрами- типа 0830.

    надо сделать так, чтобы если есть в начале ноль- он удалился ( ноль не всегда)

    Посоветовали так- но пока не пробовал, вроде как-то странно.. что плюс ноль..

    update `products` set `products_model` = `products_model` +0

    то есть внутри products колонка products_model в которой надо значения переделать ( убрать ноль, если он вначале!)

    то есть было 0825, а стало 825..и так далее.
     
  2. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Димитрий, вот так попробуй, удалит все нули в начале строки:

    update products set products_model = trim(leading '0' from products_model)
     
  3. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    есть БД, предположим состоит она их двух колонок
    ID1 DI2
    ID1 уникальный инкрементный ключ (неважно) поле Di1 есть уникальный int

    Нужно составить запрос INSERT таким образом чтобы запись добавлялась только если у вставляемой записи DI2 не равно не одному из значений уже DI2 уже сохраненых в БД
    т.е. чтото вроде INSERT into table (DI2) Values ($DI2) WHERE DI2_вставляемой != не_одной_DI2_уже_существующей
    Как такое реализовать ?
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    cupper или повесить уникальный индекс на нужный столбец, а добавлять данные так: Если требуется сохранить ID самой старой записи
    Code:
    INSERT IGNORE ...
    А если необходимо обновлять ID на самую новую, то вместо INSERT используйте REPLACE
     
    _________________________
  5. cupper

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

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    кроче есть набор строк который нужно внести в БД, но только те из них у которых уже нет в БД, проверка того есть запись в БД или нет осуществляется по полю DI2.
    На счет чтобы сделать это поле уникальным это идея, но все же хотелосьбы без вмешательства в саму БД.

    PS. а что в случае если в БД DI2 уникальна и я добавляю запись у которой значение поля DI2 совпадает с одним из значения уже хранящимся в БД ?
     
  6. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    cupper
    http://php.net/manual/en/function.mysql-num-rows.php
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    cupper

    Правда с REPLACE нужно быть осторожным - этот оператор может удалить несколько записей, что доставит много минут удивления

    Ну или можно открывать транзакцию на два запроса, но это, поверьте, извращение. Или получите неопределенность, если несколько скриптов будут записывать данные
     
    _________________________
  8. LASS0

    LASS0 Member

    Joined:
    3 Jan 2009
    Messages:
    0
    Likes Received:
    17
    Reputations:
    1
    Необходима помощь, есть две таблицы:

    Первая с комментариями к постам
    [​IMG]
    столбец id_post это id поста из 2й таблицы

    Вторая с постами
    [​IMG]

    Необходимо, чтобы посты выводились в порядке по последним оставленным к ним комментариям (тоесть по убыванию столбца id из первой таблицы)
    post4
    post2
    post1
    post3
    [​IMG]

    Составил запрос, но выводит не совсем так как нужно :(
    "SELECT p.text, p.id, c.id_post, MAX(c.id)
    FROM post AS p, comments AS c WHERE p.id = c.id_post GROUP BY c.id_post ORDER BY c.id DESC"
     
  9. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Так?
    Code:
    select p.id as post_id, p.text as post_text
    from post p
    inner join comments c on c.id_post = p.id
    group by p.id
    order by c.id desc
    
     
  10. LASS0

    LASS0 Member

    Joined:
    3 Jan 2009
    Messages:
    0
    Likes Received:
    17
    Reputations:
    1
    Выводит пустой результат :(
     
  11. v00d

    v00d Member

    Joined:
    11 Oct 2010
    Messages:
    34
    Likes Received:
    10
    Reputations:
    7
    Вот твой запрос:
    ----------
    HTML:
    SELECT p.text, p.id, MAX( c.id ) 
    FROM post AS p, comments AS c
    WHERE p.id = c.id_post
    GROUP BY c.id_post
    ORDER BY MAX( c.id ) DESC 
     
    1 person likes this.
  12. LASS0

    LASS0 Member

    Joined:
    3 Jan 2009
    Messages:
    0
    Likes Received:
    17
    Reputations:
    1
    Да то что нужно, спасибо!
     
  13. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    Code:
    select post.*, (ifnull(upcount.up_count,0) - ifnull(downcount.down_count,0)) as ratio, msgcount.msg_count from post
    left join
    (
        select id_post, method, count(*) as up_count from votes
        group by id_post, method
        having method = 'up'
    ) upcount on upcount.id_post = post.id_post
    left join
    (
        select id_post, method, count(*) as down_count from votes
        group by id_post, method
        having method = 'down'
    ) downcount on downcount.id_post = post.id_post
    left join
    (
        select id_post, count(*) as msg_count from message
        group by id_post
    ) msgcount on msgcount.id_post = post.id_post
    where post_category='1'
    если нет сообщений то в msg_count записывает NULL , как сделать что бы писал вместо NULL число 0
     
    #1253 InfectedM, 20 Oct 2010
    Last edited: 20 Oct 2010
  14. Richard_Kalt

    Richard_Kalt New Member

    Joined:
    7 Oct 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    приветос народ пишу магазин вот у мя задача что бы начиная id до картинки товара всё хранилась в SQL работаю с MSSQL вот а с БД я не работал может кто литературу подскажет или совет даст как это реализовать в C# заранее спасибо
     
  15. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    вопрос по MySQL
    Нашёл тута слепую скулю
    id=1+AND+1=1-- работат
    id=1+AND+substring(1,1,1)=1-- не работат
    И также есть вывод ошибок:
    Code:
    Invalid SQL: SELECT ticketid, ticketmaskid FROM `tickets` WHERE userid=12345 AND ticketstatusid IN( 7 ) AND is_rated=0 AND ticketid != 1 AND substring(1,1,1)=1--; (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 '' at line 1)
    id=1+AND+2-1=1-- работат
    id=1+AND+(2-1)=1-- не работат
    Code:
    Invalid SQL: SELECT ticketid, ticketmaskid FROM `tickets` WHERE userid=12345 AND ticketstatusid IN( 7 ) AND is_rated=0 AND ticketid != 1 AND (2-1)=1--; (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 '(2-1)=1--' at line 1)
    на что он ругается :confused:
     
    #1255 Ponchik, 23 Oct 2010
    Last edited: 23 Oct 2010
  16. Дирижабль

    Дирижабль [ ✯✯✯ Ядерный Суицид ✯✯✯ ]

    Joined:
    6 Jan 2010
    Messages:
    369
    Likes Received:
    346
    Reputations:
    292
    Ponchik может на скобки ()?
     
  17. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    ну а что с ними не так... обычные скобки, на локалхосте такое работает :rolleyes:
     
  18. Adio

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

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Вопрос.
    В базе есть куча мессаг -

    Как мне вывести ВСЕ похожие - не только сравнивать (т.е в писывать самому и что бы искало по 1 значению ) А что бы именно все Сообщение Одинаковые или схожие были показаны.

    К примеру есть куча тайтлов одинаковых и почти одинаковых их нужно вывести как такое сделать ?
     
  19. bjong

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

    Joined:
    26 Jul 2003
    Messages:
    41
    Likes Received:
    12
    Reputations:
    18
    Решил проблемку через функцию max() :)
     
    #1259 bjong, 23 Oct 2010
    Last edited: 24 Oct 2010
  20. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    SELECT * FROM table_name WHERE title LIKE %text%;

    http://technet.microsoft.com/ru-ru/library/ms179859.aspx
    % - Любая строка длиной от нуля и более символов.
    _ (подчеркивание) Любой одиночный символ.
     
Thread Status:
Not open for further replies.