Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Select возвращает 0, после выполнения. / 21 сообщений из 21, страница 1 из 1
16.05.2016, 14:10
    #39236546
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
Здравствуйте, есть следующий код для создания таблиц связанные через дополнительную таблицу newsZapros.
Ошибок нету, но при выполнении Select он возвращает пусто.

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT nd.title, nd.timestamp, nd.textnews, nt.tag, na.authorName, na.email, ni.img
FROM newszapros nz
INNER  JOIN NewsData nd ON nd.id_news = nz.id_news
INNER  JOIN NewsAuthors na ON na.id_author = nz.id_author
INNER  JOIN NewsTag nt ON nt.id_tag = nz.id_tag
INNER  JOIN NewsImg ni ON ni.id_img = nz.id_img




Заполняю таблицы с помощью следующего кода:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
INSERT INTO `NewsData` SET 
			`title`='title',
			`timestamp` ='1',
			`textnews` ='body';
INSERT INTO `NewsTag` SET 
			`tag`='tag';
INSERT INTO `NewsAuthors` SET 
			`authorName`='authorName',
            `email`='email';
INSERT INTO `NewsImg` SET 
			`img`='img'; 







Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
/*таблица - данные*/
CREATE TABLE IF NOT EXISTS `NewsData` (
    `id_news` 		 INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`title` 		 text NOT NULL,										/*заголовок*/
	`textnews` 		 text NOT NULL,										/*сама новость*/
	`hide` 			 int(1) NOT NULL default '0',						/*скрыта/открыта новость дл¤ всех*/
	`prioritet_news` int(6) default null,								/*приоритет новости 0 - обычно, 1 в самом вверху выводитс¤*/
	`timestamp` 	 datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,	/*время размещени¤*/
	PRIMARY KEY (id_news)												/*главный ключ ID*/
)ENGINE=INNODB  DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci;

/*таблица - автор*/
CREATE TABLE NewsAuthors (
	`id_author` 	INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`authorName` 	varchar(100) NOT NULL default '',
	`email` 		varchar(255),	
	PRIMARY KEY 	(id_author)
)ENGINE=INNODB  DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci;
 
 /* таблица - таг*/
CREATE TABLE IF NOT EXISTS `NewsTag` (
	`id_tag` 			INT UNSIGNED NOT NULL auto_increment,		/*уникальный ID*/
	`tag` 				text NOT NULL,										/*заголовок*/
	PRIMARY KEY (id_tag)												/*главный ключ ID*/
)ENGINE=INNODB  DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci;

  /* таблица картинки */
CREATE TABLE IF NOT EXISTS `NewsImg` (
	`id_img` INT UNSIGNED NOT NULL AUTO_INCREMENT,				/*уникальный ID*/
	`img` 	 varchar(255) NOT NULL,							/*картинка*/									
	PRIMARY KEY (id_img)									/*главный ключ ID*/
)ENGINE=INNODB  DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci;

/*таблица запрос*/
CREATE TABLE newsZapros (
	id_tableZapros 	INT UNSIGNED NOT NULL AUTO_INCREMENT,
    id_news   		INT UNSIGNED NOT NULL,
    id_author  		INT UNSIGNED NOT NULL,
    id_tag 			INT UNSIGNED NOT NULL,
    id_img 			INT UNSIGNED NOT NULL,
    PRIMARY KEY(id_tableZapros),
    FOREIGN KEY (id_news) 	REFERENCES NewsData(id_news) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (id_author) REFERENCES NewsAuthors(id_author) ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (id_tag) 	REFERENCES NewsTag(id_tag) ON DELETE CASCADE ON UPDATE CASCADE,
	FOREIGN KEY (id_img) 	REFERENCES NewsImg(id_img) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=INNODB  DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci;
/* т.е. связываем параметр из таблицы  id_news  с таблицей NewsData и  её параметром id_news*/
...
Рейтинг: 0 / 0
16.05.2016, 14:17
    #39236555
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45,

Таблицу newszapros забыли заполнить.
...
Рейтинг: 0 / 0
17.05.2016, 06:06
    #39237035
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
а как её заполнить?, я как понял она автоматически же должна заполняться?, в ней храняться одни ID, или её полностью убрать и все внешние ключи перенести в таблицу Новости -NewsData
...
Рейтинг: 0 / 0
17.05.2016, 09:38
    #39237090
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45,

Нет, не должна. Заполняйте самостоятельно.
...
Рейтинг: 0 / 0
17.05.2016, 11:14
    #39237169
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
при попытке заполнения её выдает ошибку Mysql error 1452 - Cannot add or update a child row: a foreign key constraint fails,
...
Рейтинг: 0 / 0
17.05.2016, 11:17
    #39237172
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45Cannot add or update a child row: a foreign key constraint fails,В мастер-таблицу надо добавлять записи после соответствующих записей в детейл-таблице.
...
Рейтинг: 0 / 0
17.05.2016, 11:33
    #39237192
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
Т.е. вот так заполнять?
INSERT INTO `NewsTag` SET
`tag`='tag';
INSERT INTO `NewsAuthors` SET
`authorName`='authorName',
`email`='email';
INSERT INTO `NewsImg` SET
`img`='img';
INSERT INTO `NewsData` SET
`title`='title',
`timestamp` ='1',
`textnews` ='body';
INSERT INTO newszapros SET
id_tableZapros = LAST_INSERT_ID(),
id_news = LAST_INSERT_ID(),
id_author = LAST_INSERT_ID(),
id_tag = LAST_INSERT_ID(),
id_img = LAST_INSERT_ID();
...
Рейтинг: 0 / 0
17.05.2016, 11:37
    #39237199
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45id_tableZapros = LAST_INSERT_ID(),
id_news = LAST_INSERT_ID(),
id_author = LAST_INSERT_ID(),
id_tag = LAST_INSERT_ID(),
id_img = LAST_INSERT_ID();Сами-то в это верите?
После каждого предыдущего INSERT-а надо делать свой вызов LAST_INSERT_ID() и сохранять полученное значение в промежуточную переменную.
...
Рейтинг: 0 / 0
17.05.2016, 11:55
    #39237221
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
А если вот так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
INSERT INTO `NewsTag` SET 
			`tag`='tag';
SET @TagID = LAST_INSERT_ID();
INSERT INTO `NewsAuthors` SET 
			`authorName`='authorName',
            `email`='email';
SET @AuthID = LAST_INSERT_ID();
INSERT INTO `NewsImg` SET 
			`img`='img'; 
SET @ImgID = LAST_INSERT_ID();
INSERT INTO `NewsData` SET 
			`title`='title',
			`timestamp` ='1',
			`textnews` ='body';
SET @NewsDataID = LAST_INSERT_ID();
INSERT INTO newszapros SET
	id_news = @NewsDataID,
    id_author =  @AuthID,
    id_tag = @TagID,
    id_img = @ImgID;
...
Рейтинг: 0 / 0
17.05.2016, 12:05
    #39237227
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45А если вот так?Да, примерно так.
...
Рейтинг: 0 / 0
17.05.2016, 12:05
    #39237228
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
благодарю, наконец то сдвинулся))!
...
Рейтинг: 0 / 0
18.05.2016, 11:13
    #39238035
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
Здравствуйте, а не подскажите как удалять записи сразу из всех связанных таблиц?
Т.е. я отловил ID - строчки в связанной таблицы с внешними ключами на другие таблицы в newszapros.
В этой строчке хранятся все ID записи на другие таблицы (например, newsdata.id_news = newszapros.id_news)

Пробую удалить таким способом выдает ошибку #1064
DELETE FROM `newsdata`
LEFT JOIN `newszapros` ON newsdata.id_news = newszapros.id_news
WHERE newszapros.id_tableZapros = 10;

Работает, каскадное удаление - т.е. удаляет эту запись и из таблицы newsdata и newszapros. А как с других 3 таблиц удалить?, при том что я могу отловить только ID одного параметра, не очень бы хотелось отлавливать все 4 ID для каждой таблицы и передавать их на другую страницу для удаления.
DELETE FROM `newsdata` WHERE id.news=10;
...
Рейтинг: 0 / 0
18.05.2016, 11:16
    #39238042
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45А как с других 3 таблиц удалить?А зачем из других таблиц удалять? Ведь на них могут быть другие ссылки из других записей этой же таблицы или вообще из других таблиц.
...
Рейтинг: 0 / 0
18.05.2016, 11:24
    #39238058
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
Ну как, у меня есть новость (берется из таблицы новости), у этой новости есть автор (берется из таблицы авторы), тэг новости (берется из таблицы теги) и картинка (берется из таблицы картинки), т.е. заполняю все 4 таблицы, а ИД этих таблиц заполняются в таблицу связи с внешними ключами.

Например я хочу удалить эту новость, ну и следовательно картинки к ней и автора кто добавил её и тэг этой новости, или я как то не так мыслю?
...
Рейтинг: 0 / 0
18.05.2016, 11:26
    #39238064
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45,

И картинки, и авторы, и тэги могут быть использованы в других новостях.
...
Рейтинг: 0 / 0
18.05.2016, 11:31
    #39238072
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
...
Рейтинг: 0 / 0
18.05.2016, 11:38
    #39238076
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
Ну по логике вы конечно правы, подскажите а как сделать правильно?, получается я при каждой новой новости добавляю автора тег и картинку как новую запись, т.е. у меня идет наполнение таблиц одинаковыми данными, по логике же Автор должен быть 1, а новостей много.
http://hostingkartinok.com/show-image.php?id=9a7bba025c8d98a4d09d7dd8fa0b416f - скрин таблицы Авторы
...
Рейтинг: 0 / 0
18.05.2016, 11:40
    #39238081
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45скрин таблицы АвторыА зачем там авторы повторяются?
Для каждого автора должна быть одна запись. А другие таблицы могут на нее ссылаться.
...
Рейтинг: 0 / 0
18.05.2016, 13:12
    #39238186
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
miksoft,

Думаю вы правы, логика самой БД была неверна, изменил таблицу Новости на, сделал поля уникальными, внешние ключи в само создание таблицы не получилось обьединить, сделал через alter table. Теперь встала та же проблема как её заполнить?

Т.е. теперь есть 3 внешних поля это tag img и author.
Думал так же сделать через создание переменной
SET @tagbody = tag; - ошибка

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
/* новости */
CREATE TABLE IF NOT EXISTS `NewsData` (
    `id_news` 		 INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`title` 		 varchar(255) NOT NULL,										
	`textnews` 		 varchar(255) NOT NULL,										
	`hide` 			 int(1) NOT NULL default '0',						
	`prioritet_news` int(6) default null,	
	`author` 		 varchar(255) NOT NULL UNIQUE default '',	
	`tag` 			 varchar(255) NOT NULL UNIQUE,	
	`img` 	 		 varchar(255) NOT NULL UNIQUE,				
	`timestamp` 	 datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,	
	PRIMARY KEY (id_news)
)ENGINE=INNODB  DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci;
ALTER TABLE `newsauthors`
  ADD CONSTRAINT `newsauthors_ibfk_1` FOREIGN KEY (`author`) REFERENCES `newsdata` (`author`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `newsimg`
  ADD CONSTRAINT `newsimg_ibfk_1` FOREIGN KEY (`img`) REFERENCES `newsdata` (`img`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `newstag`
  ADD CONSTRAINT `newstag_ibfk_1` FOREIGN KEY (`tag`) REFERENCES `newsdata` (`tag`) ON DELETE CASCADE ON UPDATE CASCADE;
...
Рейтинг: 0 / 0
18.05.2016, 13:18
    #39238188
Близнец1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
shade45получается я при каждой новой новости добавляю автора тег и картинку как новую запись, т.е. у меня идет наполнение таблиц одинаковыми данными
А про нормализацию баз данных вы слышали?
...
Рейтинг: 0 / 0
18.05.2016, 13:25
    #39238195
shade45
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select возвращает 0, после выполнения.
Близнец1980,
её и пытаюсь достичь, на работе поставили задачу запили модуль заявок, вначале вообще все было в 1 таблице, потом умные люди посоветовали создать связи, теперь осваиваю.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Select возвращает 0, после выполнения. / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]