Страница 1 из 1
Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 14:34:41
vadim64
Имеются таблицы 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 автора автоматически закидывался в записи с книгами?
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 15:24:05
Electronik
запрос 1 добавляем сначала автора что бы прописался id
Код: Выделить всё
INSERT INTO authors (name) VALUES ('$name')
запрос 2 добавляем книгу и ищем автора
Код: Выделить всё
INSERT INTO books (name) VALUES ('$title', ("SELECT author_id FROM authors WHERE '$name'"))
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 18:45:56
vadim64
спасибо!!!
возникли вопросы:
1. есть ли ещё альтернативы кроме транзакций?
2. вы второй раз уже меня выручаете. может литературу посоветуете?
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 19:18:49
Gamerman
В своем софте вообще без транзакций обхожусь. На мускуле.
Нужно определиться, нужны ли они, и что будет, если будет без транзакций и глюканет что-либо.
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 19:20:19
Electronik
1. Что вы имеете ввиду
2. Не знаю, не читал особо книг, могу посоветовать как можно больше практики.
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 19:37:28
хз
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 20:03:47
vadim64
to gamerman: а как в данном случае обеспечить атомарность описанной в посте
http://forum.lissyara.su/viewtopic.php? ... 46#p300406 операции, без использования транзакции??
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 20:10:02
Gamerman
Нужно больше информации. Например, откуда будут браться книги введенного автора, и т.д.
Я не говорю, что транзакции не нужны (иначе б их не делали), а то, что без них часто можно обойтись, применяя другие методы.
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 20:17:35
vadim64
всё будет браться из формы, из масива ПОСТ, по хттп
я спросил про возможность обойтись без транзакций, потому что не знаю всех мулек мускуля
там каких нибудь двойных инсертов нету? одним оператором вставка разных динамических величин в разные таблицы и столбцы?
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-07-01 21:55:52
Gamerman
По очереди делайте инсерты.
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-08-31 10:10:43
vadim64
А как сказать MySQL, чтобы он всем полям и таблицам в некоторой базе назначил иной колейшен?
Можно не одни запросом, хоть как
Помогите!!!))))
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-03 18:20:37
vadim64
Другой вопрос:
есть таблица A(col1, col2, col3) и таблица B(col4, col5, col6)
каким запросом можно попросить MySQL по порядку скопировать значения из A.col2 и A.col3 в B.col5 и B.col6?
B.col4 будет заполняться автоинкрементом
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-03 18:45:32
vadim64
почитал доку)))
дошло)))
Код: Выделить всё
INSERT INTO B (col5, col6) SELECT (col2, col3) FROM A
если кому нада вместе с индексами, будет проще
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-03 19:43:17
vadim64
сам только что попался:
если писать как я указал
Код: Выделить всё
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
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-03 19:46:02
vadim64
троли - такие троли
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-09 20:21:51
vadim64
В таблице 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
не вернёт книги, у которых есть неизвестные характеристики.
А можно как нибудь сделать так чтобы вернул? Какие операторы нужно использовать?
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-09 22:07:42
PYO
Какие операторы нужно использовать?
JOIN
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-09 22:34:15
vadim64
эээээ
а как это?
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-09 23:04:55
Electronik
Код: Выделить всё
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
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-09 23:33:53
PYO
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-10 22:50:35
vadim64
ок)))
спасиба)))
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-12 21:11:54
FiL
PYO писал(а):Какие операторы нужно использовать?
JOIN
не join, a left join. Собственно в примере правильно, да. Просто чтоб ТС не путал разные джойны
Re: Очередная порция глупых вопросов SQL-style
Добавлено: 2011-09-12 21:37:59
vadim64
спасибо
почитаю про них - пойму разницу