Ответы пользователя по тегу SQL
  • Какую среду разработки выбрать для написания "аналога 1С", имеющию поддержку работы с SQL серверами?

    svd71
    @svd71
    Ну если только для защиты, то зайдите на torry.net и скачайте любой скриптовый компонент. И в путь. Или можно потратиться на FastReport скрипт - еще шикарней аналогия будет. Ведь без генератора печати не обойтись.

    Хотя если вам хотелось бы, чтоб с "пользой на будующее" что-то делать и если есть времени более года, то лучше начать с изучения java или c#.
    Ответ написан
    Комментировать
  • Как исключить все строки с одинаковым значением поля, если одна из них не подходит?

    svd71
    @svd71
    Select * from mytable t1
    Where not exists (select * from mytable t2
    Where t2.objid=t1.objid and t2.status=1)
    Ответ написан
    Комментировать
  • Как объединить две таблицы?

    svd71
    @svd71
    Можно. Но нужно сформировать псевдостолбец.
    Nozzi уже один синтаксис задал, можно использовать его. но новые фишки не всегда клнятся под старые базы. Да и на том, на чем набираю текст много писать не удобно. Поэтому попробую объяснить по старинному синтаксису
    Select cast(0 as int) pseudoid, id, <все другие нужные столбцы> from t1 where status <> 1
    Union
    Select cast(0 as int) pseudoid, id, <все другие нужные столбцы> from t2 where status <> 1
    Union
    
    -- теперь самый фокус
    Select  id, 0, <все другие нужные столбцы> from t1 where status = 1


    На что обращать внимание:
    1. В объединении имена и типы столбцов задаются их первого селекта.
    2. Количество столбцов и их типы всех селектов должны совпадать. Иначе нужно делать кастинг.
    3. Сортировка задается в последнем селекте и применяется для всего объединения.
    Ответ написан
    Комментировать
  • Ключ добавляется не по порядку, можно ли изменить?

    svd71
    @svd71
    что такое ключ в таблице? Это данные, добавляющие уникальность поля. И нарушать эту безопасность во время работы абсолютно не нужно - рисуете потерять связи с другими таблицами. Есть, конечно, всякие методы о каскадировании, но обычно кто пользуется к аскадированием не занимется подобными решениями.

    Если вы переживаете о том, что на ваш век циферей в ключе не хватит, то сначала посчитайте количество возможных вариантов в целочисленном виде. 32-бита дают 4294967295 вариантов. Даже если добавлять в секунду одну запись, то этих значений хватит на 4294967295/(60*60*24) =49710 дней = 136 лет.

    Но даже в таких случаях просто увеличивают разрядность. Например 64 разряда дают число 9.223372e+18. На сколько хватит этого размера посчитайте сами.

    Но речь идет о мускуле, который имеет своих тараканов. А в часности: при объявлении поля типом int генерируется размер доспупный на 10 десятичных знаков. В нем умещается масимальное значение 9999999999 равное приблизительно 317и годам.
    Ответ написан
    Комментировать
  • Как написать MySQL запрос, чтобы строки с одинаковым значением поля шли подряд, но не отсортированными?

    svd71
    @svd71
    Квазисортировку практически невозможно сделать ни в одной СУБД. Точнее сказать - можно сделать то, что вы правильно сформулируете.

    Пробуйте сортировку с мнимыми вычисляемыми полями:
    Select * from table1 
    order by cast(field1 as varchar(5))+field2
    Ответ написан
  • Как при запросе к двум таблицам назначить для каждой свой WHERE?

    svd71
    @svd71
    Если я правильно понял, то вам выдать часть записей из таблицы comments со своим условием и к полученным записям добавить записи из dell со своим условием. При этом обе таблицы не имеют общих ключей друг на други и какую то общюю таблицу(!?). Без такого условия вы получите кортезиан: каждая запись их comments будет повторяться столько раз, сколько существут записей в dell.

    Если же Вам требуются всетаки такие отдельные куски из этих таблиц, то можно воспользоваться объединением. Но фокус в том, что отсуствующие столбцы из двуж таблиц нужно симулировать:
    Select
    comments.post, comments.id, comments.parent_id, comments.name, 
    Cast(0 as integer) as ban, cast('' as varchar(200) as adm
    from comments where comments.post LIKE '$docid'
    
    UNION
    
    select cast('' as varchar(250)), 0 , 0, '', ban, adm from dell where dell.adm LIKE '$adm'
    Ответ написан
    3 комментария
  • Как объединить повторяющее значение переменных?

    svd71
    @svd71
    ваша проба не засчитана: group by идет перед частью условия из where. Для счастья перенесите в конец:SELECT department.titli_dep
    FROM tasks
    INNER JOIN department ON tasks.id_dep_tas=department.id_dep AND id_oper_tas=$id_oper GROUP BY department.titli_dep

    Во вторых при группировке нужно указывать все столбцы, по каким проводится группировка и столбцы тля агрегатной обработки. Так что "*" в запросе не тянет.

    ПС: для поставленной задачи вы можете вынести такую группировку во view (проекцию) и потом джойнить запрос к ней с другоми таблицами для вывода нужных данных. Или ломать голову с вложенными запросами. Решение не единственное.
    Ответ написан
    Комментировать
  • Что нужно знать в SQL?

    svd71
    @svd71
    Самый частотребуемые практики в реальной работе: использование всех видов джоинов данных и скорость их обработки на конкретной реализации сервера.
    Ответ написан
    Комментировать
  • Выборка больших данных из базы сложными запросами?

    svd71
    @svd71
    есть еще чудесные операторы в селекте: limit и offset. Иногда они помогают.
    select * from (
       select * from table1
       union
       select * from table2
    ) limit 100 offset 200
    Ответ написан
    Комментировать
  • Как искать по конечной части ключа в sql ?

    svd71
    @svd71
    есть такое слово like:

    select * from mytable where myfield like '%SOMETHING'  -- ищет чтоб SOMETHING было в конце
    
    select * from mytable where myfield like '%SOMETHING%'  -- ищет в нутри с любой позиции
    
    select * from mytable where myfield like 'SOMETHING%'  -- ищет сначала.
    Ответ написан
    6 комментариев
  • Что нужно знать о SQL и СУБД админу?

    svd71
    @svd71
    Хорошему админу - все.
    Среднему: бэкапы, восстановления, управление транзакциями и основные сиквеловские команды. кроме того понимать что такое таблица, из чего она состоит, триггеры, проекции, хранимые процедуры и прочее и прочее.
    Ответ написан
    3 комментария
  • Как подключиться к MSSQL из Ubuntu Server+PHP+PDO?

    svd71
    @svd71
    Сначала нужно убедиться, что доступ на сиквеловский сервер есть. Для этого любым клинтом mysql, или на худой конец с telnet подсоединиться к серверу, открыть базу и просто прочитать список таблиц. Если не удается, то разбираться почему. Скорее всего какой-ниьь брандмауэр или файерволл запущен и не дает соединиться извне. Или у мускула написано првило работать только по localhost
    Ответ написан
  • Что значит пакетная вставка данных?

    svd71
    @svd71
    Основное время обработки DML - это работа с транзакцией: старт, создания версии записей, соммит/роллбэк.
    Пакетная обработка - это значит обработка пакетом нескольких команд.
    Чаще всего основана на том, что для такой группы команд( допустим на 500 инсертов) используется одна транзакция.
    В некоторых СУБД (обычно блокировочник) )такой способ может достигаться и через использование execute statement - когда группа команд исполняется как одна операция.
    В других - это возможное отключение логгирования операций (bulk loading), что может послужить невозможностью откатить изменения.

    ПС: SQL Server - это общее понятие. Лучше указывать какой именно: MySQL SQL Server, MS SQL, Firebird, Sybase ASA/ASE, ....и т.д. Все они SQL Servera.
    Ответ написан
  • MySQL - почему выдает NULL из-за функции MySQL?

    svd71
    @svd71
    Если ничего не найдено, то возвращаемый курсор будет содержать 0 записей, а не значение NULL.

    Хотя любые операции с NULL-значением возвращают NULL-значение.

    ПС: немного неразумнохранить пароли в базе в открытом виде. Любой взлом ведет к прямому раскрытию паролей. Гораздо безопасней хранить только md5, высчитаный вместе с солью. Даже известное значение соли затрудняет прямой доступ к данным.
    Ответ написан
  • Почему возвращается только первое совпадение при использование оператора LIKE в mysql?

    svd71
    @svd71
    Потому что имеются две функции: fetch и fetchAll. После первой нужно перемещаться по курсору с помощью функции next. Вторая же вернет все строки из курсора за одно обращерие.
    Ответ написан
  • Cтоит ли создавать отдельную таблицу для картинок в БД ?

    svd71
    @svd71
    На самом деле картинки - это такой ресурс, который лучше не колбасить движком без надобности. Запросто скажется на производительности. Намного лучше в базе в отдельной таблице хранить описание картинки(путь к файлу, заголовок и т.д. и т.п.), но картинку физически хранить на диске. С файловой системой операции показа картинок будут проходить намного быстрее.
    Ответ написан
    1 комментарий
  • Почему при каскадном удалении записи закрепленные в ней записи не удаляются?

    svd71
    @svd71
    Во первых указанные ссылки не имеют пермишенов для просмотра.

    Во вторых реалтзация на собственных триггерах ни чем не хуже каскадного удаления. А даже лучше. Такие каскадные операции выполняют системные триггеры. И перед тем, чтоб что то делать они должны правильно понять написанное условие. А на это требуется время. Так что ваш триггер будет побыстрее любого системного.

    Ну а если решите все же с каскадами разобраться - проверяйте синтаксис. Где-то там может быть ошибка. Поэкспериментируйте с новыми тестовыми таблицами. Найдите отличия.
    Ответ написан
    Комментировать
  • Как SQL-запросом сделать из повторяющихся строк столбцы?

    svd71
    @svd71
    select
    m.date,
    (select sum(kolichestvo) from mytable p where p.produkt='Отруби' and p.date=m.date) as OTRUBI,
    (select sum(kolichestvo) from mytable p where p.produkt='Перья' and p.date=m.date) as PERIA,
    (select sum(kolichestvo) from mytable p where p.produkt='Пшено' and p.date=m.date) as PSHENO,
    (select sum(kolichestvo) from mytable p where p.produkt='Картон' and p.date=m.date) as Karton,
    (select sum(kolichestvo) from mytable p where p.produkt='Кирпич' and p.date=m.date) as KIRPICH
    
    from mytable m
    group by m.date
    order by m.date
    Ответ написан
    Комментировать
  • Как осуществить последовательную выборку из двух таблиц без повторяющихся столбцов (SQL)?

    svd71
    @svd71
    есть такой чудный оператор UNION:
    select shifr, size, unit from table1 where param1=:param
    union
    select shifr, size, unit from table2 where param1=:param


    условия одно: порядок следования столбцов, их размер и тип должны быть идентичны. Поэтому если где-то будет несовпадающий столбец, то его нужно преобразовать к столбцу из первого селекта.
    Ответ написан
  • Почему стала появлятся такая ошибка

    svd71
    @svd71
    какой енжин для соединения с базой используете? если PDO, то внем разрешено только один запрос посылать.
    Дробите тогда скрипт на отдельные запросы и каждый запрос по отдельности посылайте. Или исползуйте mysql_queryю Там разрешено скрипт с несколькими запросами посылать.
    Ответ написан