[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обьединение MyISAM
ValenoK
Всем здрасте!
перерыл кучу доки и примеров, но все равно не понял, как это работает:
Допустим есть 3 таблицы
tab1 (tab1ID, tab1_1, tab1_2, tab1_3,)
tab2 (tab2ID,tab2_1, tab2_2, tab2_3, tab1ID)
tab3 (tab3ID,tab3_1,tab3_2,tab3_3, tab1ID)

делаем запрос вида:

SELECT tab1.tab1_1, tab1.tab1_3, tab2.tab2_3, tab3.tab3_1, tab3.tab3_2,
tab3.tab3_3
FROM
tab1, tab2,tab3
WHERE
tab2.tab1ID=tab1.tab1ID AND
tab3.tab1ID=tab1.tab1ID


Но у меня остаются пустыми tab2.tab1ID, tab3.tab1ID
т.е. как бы обьединения таблиц не происходит... что я делаю не так?



Спустя 30 минут, 57 секунд (6.06.2010 - 09:56) ValenoK написал(а):
Интуитивно догадываясь, я подозреваю, что нужно в tab2.tab1ID, tab3.tab1ID вносить значения когда выполняется INSERT INTO но.... откуда мне узнать эти значения, чтоб к tab1ID были привязаны именно те записи из tab2 и tab3 которые мне нужны?

Спустя 49 минут, 28 секунд (6.06.2010 - 10:46) Michael написал(а):
Ну так этот внешний ключ надо запоминать отдельно. А потом вставлять в связанные таблицы.
В php есть удобная функция - mysql_insert_id() - возвращает значение последнего id сгенерированного для insert.

А с тем запросом - все ОК.

Спустя 27 минут, 9 секунд (6.06.2010 - 11:13) Basili4 написал(а):
Есть такая фигушка называется подзапрос щас привиду пример

INSERT HIGH_PRIORITY INTO itog (nameFirst,nameSecond) VALUES (SELECT
`first`.nameFirst1, second.nameSecond
FROM
test.`first`, test.second
WHERE
second.id = `first`.id AND `first`.id = 1);

Вобщем выбераем из табл `first` и second и вставляем в таблу itog можно уложнить напри мер так выбираем из табл одну запись с одним полем и по этому значению выбираем из других табл записи.

Спустя 6 минут, 44 секунды (6.06.2010 - 11:20) ValenoK написал(а):
Простите меня за наглость и тупость , как это правильно реализовать?

mysql_query("INSERT INTO tab1.tab1_1, tab1.tab1_3, tab2.tab2_3, tab3.tab3_1, tab3.tab3_2, tab3.tab3_3 values ('какие-то значения')");
$id = mysql_insert_id();
/*в переменную $id запомнили значение mysql_insert_id() */
/*А потом куда его ???*/


Спустя 4 минуты, 33 секунды (6.06.2010 - 11:24) Basili4 написал(а):
ValenoK
Тебе нужно выбрать записи из одних таблиц и сложить их в другой так ??????

Спустя 4 минуты, 30 секунд (6.06.2010 - 11:29) Michael написал(а):
ValenoK
- сначала вставляешь в главную таблицу значения
- получаешь сгенерированный id
- вставляешь запись в 2-у табл.
- и в третью.

Спустя 9 минут, 13 секунд (6.06.2010 - 11:38) ValenoK написал(а):
Цитата (Basili4 @ 6.06.2010 - 08:24)
ValenoK
Тебе нужно выбрать записи из одних таблиц и сложить их в другой так ??????

Совершенно верно

Спустя 4 минуты, 21 секунда (6.06.2010 - 11:42) Basili4 написал(а):
ValenoK
Ну не парся все делается одним запросом



INSERT HIGH_PRIORITY INTO имя таблы в которую хочеш вставить значения (список полей которые ты хочешь заполнить)
это селект который выбирает значения из других таблиц
(SELECT
`first`.nameFirst1, second.nameSecond -- отбираемые поля в том порядке какой указан здесь они вставятся в поля укзаные выше.
FROM
test.`first`, test.second
WHERE
second.id = `first`.id AND `first`.id = 1);

Все. И не надо писать кучу запросов



Спустя 35 секунд (6.06.2010 - 11:43) Basili4 написал(а):
ValenoK
Что будет не понятно спрашивай

Спустя 41 минута, 24 секунды (6.06.2010 - 12:24) ValenoK написал(а):
Цитата (Basili4 @ 6.06.2010 - 08:42)
ValenoK
Ну не парся все делается одним запросом



INSERT HIGH_PRIORITY INTO имя таблы в которую хочеш вставить значения (список полей которые ты хочешь заполнить)
это селект который выбирает значения из других таблиц
(SELECT
`first`.nameFirst1, second.nameSecond -- отбираемые поля в том порядке какой указан здесь они вставятся в поля укзаные выше.
FROM
test.`first`, test.second
WHERE
second.id = `first`.id AND `first`.id = 1);

Все. И не надо писать кучу запросов



Вот я опять тупикнул..(
есть справочники с данными(tabl2, tabl3) и есть отчетная табл (допустим tabl1) получается, что в tabl1 должны быть по мимо своих полей, еще и все поля из tabl2, tabl3 ??

Спустя 5 минут, 4 секунды (6.06.2010 - 12:29) Basili4 написал(а):
Нет только в tabl1 должны быть только "свои" поля их посто указываешь а запросов отобраные значения из полей ложатся в поля укзаные после inserta

Спустя 3 минуты, 45 секунд (6.06.2010 - 12:33) ValenoK написал(а):
Цитата (Basili4 @ 6.06.2010 - 09:29)
Нет только в tabl1 должны быть только "свои" поля их посто указываешь а запросов отобраные значения из полей ложатся в поля укзаные после inserta

Извините... не совсем понял фразу

Спустя 25 минут, 21 секунда (6.06.2010 - 12:58) Basili4 написал(а):
Я пречитывал и сам не понял что сказал biggrin.gif

Смотри все очень просто в tabl1 есть свои поля в некоторые ты хочешь вставить значения из других таблиц так вот ты их просто перечисляешь после inserta в подзапросе (Select и.т.д) ты делаешь запрос который выбирет записи из таблиц. Вот поля которые ты указыаешь после Select всавляютя в таблицу tabl1 в поля указанные после inserta . Наприме

insert tabl1 (pole1) (select pole22 form tabl2)

Так вот вы этом примере все значения pole22 попадут в таблицу tabl1 и заполнят поле pole1


Спустя 22 минуты, 41 секунда (6.06.2010 - 13:21) ValenoK написал(а):
Цитата (Basili4 @ 6.06.2010 - 08:24)
ValenoK
Тебе нужно выбрать записи из одних таблиц и сложить их в другой так ??????

А если мне не нужно складывать данные в другую таблицу... т.е. делаем выборку

SELECT tab1.tab1_1, tab1.tab1_3, tab2.tab2_3, tab3.tab3_1, tab3.tab3_2,
tab3.tab3_3
FROM
tab1, tab2,tab3
WHERE
tab2.tab1ID=tab1.tab1ID AND
tab3.tab1ID=tab1.tab1ID

но tab2.tab1ID, tab3.tab1ID необходимо каким-то образом присвоить tab1.tab1ID
если русским языком обьяснить что мне нужно, то вот:
есть некий препарат в его состав входят некие компоненты и этот препарат изготавливают некоторые фарм. предприятия
tab1 - препарат
tab2 - компоненты
tab3 - предприятия

Спустя 13 минут, 4 секунды (6.06.2010 - 13:34) Basili4 написал(а):
тебе нужно получить препорта компоненты и предпириятия которые производят этот препорат ????
Уточни результат что ты хочешь получить



Спустя 5 минут, 23 секунды (6.06.2010 - 13:39) ValenoK написал(а):
при выборе названия препарата, должен показываться весь состав компонентов входящих в этот препарат и предприятия которые его выпускают

Спустя 26 минут, 18 секунд (6.06.2010 - 14:06) Basili4 написал(а):

SELECT tab1.tab1_1, tab1.tab1_3, tab2.tab2_3, tab3.tab3_1, tab3.tab3_2,
tab3.tab3_3
FROM
tab1, tab2,tab3
WHERE
tab2.tab1ID=tab1.tab1ID AND
tab3.tab1ID=tab1.tab1ID AND tab2.tab1ID=2



2 случае индификатор препората можно поназванию tab1ID=2 замени на поле где хранится название а 2 на само название

Спустя 23 часа, 10 минут, 44 секунды (7.06.2010 - 13:16) ValenoK написал(а):
Воспользовался mysql_insert_id(), происходит все так, как я хотел ) Но возник подводный камушек.... для одной записи нормально, а вот если я добавляю 2 или 3 записи (компонентов препарата) то соответственно и id получаются разные .... вопрос: каким макаром 2 или 3 компанента прикрутить к препарату?

Спустя 2 дня, 4 часа, 40 минут, 1 секунда (9.06.2010 - 17:56) tomash написал(а):
Когда вы добавляете компоненты, то для компонентов вы указываете id препарата, а не наоборот!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.