Очередная порция глупых вопросов SQL-style

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-07-01 14:34:41

Имеются таблицы authors и books
В таблице author хранятся записи с уникальными полями id и name. Поле id имеет статус AUTO_INCREMENT
В таблице books хранятся записи с уникальными полями id, title и author_id, где author_id - id автора из таблицы authors. Поле id имеет статус AUTO_INCREMENT
Имеется формы для добавления авторов, используется запрос а-ля

Код: Выделить всё

INSERT INTO authors (name) VALUES ('$name')
Имеется формы для добавления книг, используется запрос а-ля

Код: Выделить всё

INSERT INTO books (name) VALUES ('$title', '$author_id')
Планируется новая форма, позволяющая при добавлении автора сразу добавлять несколько его книг.
Как должен выглядеть запрос/транзакция, чтобы при вставке автора и книг, автоинкрементный id автора автоматически закидывался в записи с книгами?
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение Electronik » 2011-07-01 15:24:05

запрос 1 добавляем сначала автора что бы прописался id

Код: Выделить всё

INSERT INTO authors (name) VALUES ('$name') 
запрос 2 добавляем книгу и ищем автора

Код: Выделить всё

INSERT INTO books (name) VALUES ('$title', ("SELECT author_id FROM  authors WHERE '$name'"))
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-07-01 18:45:56

спасибо!!!
возникли вопросы:
1. есть ли ещё альтернативы кроме транзакций?
2. вы второй раз уже меня выручаете. может литературу посоветуете?
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение Gamerman » 2011-07-01 19:18:49

В своем софте вообще без транзакций обхожусь. На мускуле.
Нужно определиться, нужны ли они, и что будет, если будет без транзакций и глюканет что-либо.
Глюк глюком вышибают!

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение Electronik » 2011-07-01 19:20:19

1. Что вы имеете ввиду
2. Не знаю, не читал особо книг, могу посоветовать как можно больше практики.
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог


Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-07-01 20:03:47

to gamerman: а как в данном случае обеспечить атомарность описанной в посте http://forum.lissyara.su/viewtopic.php? ... 46#p300406 операции, без использования транзакции??
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение Gamerman » 2011-07-01 20:10:02

vadim64 писал(а):to gamerman: а как в данном случае обеспечить атомарность описанной в посте http://forum.lissyara.su/viewtopic.php? ... 46#p300406 операции, без использования транзакции??
Нужно больше информации. Например, откуда будут браться книги введенного автора, и т.д.
Я не говорю, что транзакции не нужны (иначе б их не делали), а то, что без них часто можно обойтись, применяя другие методы.
Глюк глюком вышибают!

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-07-01 20:17:35

всё будет браться из формы, из масива ПОСТ, по хттп
я спросил про возможность обойтись без транзакций, потому что не знаю всех мулек мускуля
там каких нибудь двойных инсертов нету? одним оператором вставка разных динамических величин в разные таблицы и столбцы?
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение Gamerman » 2011-07-01 21:55:52

По очереди делайте инсерты.
Глюк глюком вышибают!

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-08-31 10:10:43

А как сказать MySQL, чтобы он всем полям и таблицам в некоторой базе назначил иной колейшен?
Можно не одни запросом, хоть как
Помогите!!!))))
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-03 18:20:37

Другой вопрос:
есть таблица A(col1, col2, col3) и таблица B(col4, col5, col6)
каким запросом можно попросить MySQL по порядку скопировать значения из A.col2 и A.col3 в B.col5 и B.col6?
B.col4 будет заполняться автоинкрементом
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-03 18:45:32

почитал доку)))
дошло)))

Код: Выделить всё

INSERT INTO B (col5, col6) SELECT (col2, col3) FROM A
если кому нада вместе с индексами, будет проще

Код: Выделить всё

INSERT INTO B SELECT * FROM A
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-03 19:43:17

сам только что попался:
если писать как я указал

Код: Выделить всё

INSERT INTO B (col5, col6) SELECT (col2, col3) FROM A
mysql дайт отлуп с формултровкой
#1241 - Operand should contain 1 column(s)
проблема - скобки в операнде SELECTа
правильно писать:

Код: Выделить всё

INSERT INTO B (col5, col6) SELECT col2, col3 FROM A
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-03 19:46:02

хз писал(а):по последним данным разведки СиКуЭль гумно - http://www.opennet.ru/opennews/art.shtml?num=31061
троли - такие троли
:smile:
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-09 20:21:51

В таблице books хранятся идентификаторы книг, идентификаторы из названий, идентификаторы их авторов и идентификаторы числа их страниц

Код: Выделить всё

Поле            Тип
id              int
title_id        int
author_id       int
pages_num_id    int
Сами значения хранятся отдельно в таблицах titles, authors и pages_nums:

Код: Выделить всё

Таблица titles
Поле      Тип
id        int
value     varchar(200)

Код: Выделить всё

Таблица authors
Поле      Тип
id        int
value     varchar(200)

Код: Выделить всё

Таблица pages_nums
Поле      Тип
id        int
value     int
Но, к сожалению, параметры заполнены не для всех книг: у какой то неизвестный автор, а у другой не подсчитаны страницы.
Запрос типа

Код: Выделить всё

SELECT titles.value AS title, authors.value AS author, pages_nums.value AS pages_num 
FROM books, titles, authors, pagrs_nums
WHERE books.title_id = titles.id AND books.author_id = authors.id AND books.pages_num_id = pages_nums.id ORDER BY title
не вернёт книги, у которых есть неизвестные характеристики.
А можно как нибудь сделать так чтобы вернул? Какие операторы нужно использовать?
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

PYO
сержант
Сообщения: 187
Зарегистрирован: 2011-08-18 12:46:45

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение PYO » 2011-09-09 22:07:42

Какие операторы нужно использовать?
JOIN

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-09 22:34:15

эээээ
а как это?
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение Electronik » 2011-09-09 23:04:55

Код: Выделить всё

SELECT b.id, t.value, a.value, p.value
FROM books b
LEFT JOIN titles t ON t.id = b.title_id
LEFT JOIN authors a ON a.id = b.author_id
LEFT JOIN pages_nums p ON p.id = b.pages_nums_id
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

PYO
сержант
Сообщения: 187
Зарегистрирован: 2011-08-18 12:46:45

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение PYO » 2011-09-09 23:33:53

ещё:

Код: Выделить всё

ORDER BY t.value
в конце.

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-10 22:50:35

ок)))
спасиба)))
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение FiL » 2011-09-12 21:11:54

PYO писал(а):
Какие операторы нужно использовать?
JOIN
не join, a left join. Собственно в примере правильно, да. Просто чтоб ТС не путал разные джойны :)

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Очередная порция глупых вопросов SQL-style

Непрочитанное сообщение vadim64 » 2011-09-12 21:37:59

спасибо
почитаю про них - пойму разницу
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.