2012-03-23 6 views
0

Я пытаюсь создать форму PHP на веб-сайте, который собирает имя пользователя, адрес электронной почты, адрес и их опыт работы. Имя, адрес электронной почты и адрес все довольно просто и имеют собственное поле, но таблица опыта работы состоит из трех полей: «период времени», «работодатель» и «позиция», а несколько строк будут динамически добавляться пользователем по мере необходимости (для выполнения этого на веб-сайте используется JavaScript).MySQL (с использованием массивов) Требуется таблица предложений

Мой вопрос в том, что это лучший способ смоделировать это в базе данных MySQL? Использую ли я только одну таблицу, такую ​​как:

| UserId | Имя | Электронная почта | Адрес | Время | Работодатель | Должность |

Или я должен использовать две таблицы, как это:

| UserId | Имя | Электронная почта | Адрес |

| UserId | Время | Работодатель | Должность |

Мои мужества говорят мне, что второе решение может быть тем, что мне нужно, поскольку я не знаю, как добавить динамические массивы в базу данных. Но как мне сопоставить одни и те же UserIds второй таблицы с первой таблицей? Если я придерживаюсь первого решения, используя только одну таблицу, можно ли сохранить массивы Time, Employer и Position под одним UserId? Имейте в виду, что я не знаю заранее, сколько строк опыта работы будет создавать пользователи.

ответ

1

Вариант 2 является правильным, поскольку он создавал бы гораздо меньшую избыточность.

Таблица 1 | UserId | Имя | Электронная почта | Адрес |

Таблица 2 | UserId | Время | Работодатель | Должность |

+0

Так что если Бонни представила 4 записи занятости вместе с ее именем, адресом электронной почты и Addy с помощью веб-сайт, как связать эти 4 строки во второй таблице с ее UserId, автоматически сгенерированным первой таблицей (скажем, ее UserId равно 10)? – nubicurio

+0

представил что? –

+0

на самом деле они уже связаны через UserId, с sql JOIN вы можете эффективно генерировать виды, такие как | UserId | Имя | Электронная почта | Адрес | Время | Работодатель | Должность | – Lucy

1
Table 1  | UserId | Name | Email | Address | 

Table 2 |Id| UserId | Time | Employer | Position | 

Вариант 2 лучше, и если вы не хотите, чтобы попасть в присоединиться к вещам, просто взять $ USERID от 1-й таблицы и сделать один запрос на 2-й таблице (WHERE UserId = ' $ USERID '). Это вернет вам массу всего опыта работы пользователя.

+0

Я все еще пытаюсь выяснить, как сохранить эти записи в базе данных, поэтому на сайте заполняется 10 человек, у 1-го человека - 8 рядов опыта работы, 2-й имеет 2, а третий имеет 4 ... и т. Д. Как вторая таблица знает, какие строки принадлежат этому пользователю? – nubicurio

+0

во второй таблице есть «UserId», поэтому у 1-го человека будет 8 строк во 2-й таблице, все строки имеют одинаковый идентификатор пользователя (идентификатор человека). Прежде чем вставлять данные во вторую таблицу, вставьте имя, адрес электронной почты в 1-ю таблицу. Затем выполните запрос в 1-й таблице (WHERE Email = "его адрес электронной почты адрес "). Возвращенный массив будет иметь атрибут UserId, сохранить этот атрибут в переменной и сделать второй запрос y на второй таблице (WHERE UserId = $ userid). Я не могу объяснить больше: P –

+0

Это то, что я пытаюсь сделать с помощью PHP, чтобы сохранить записи: INSERT в таблицу1 (имя, адрес электронной почты, адрес) VALUES ('Bonnie', '[email protected]', ' Sesame Street 101 '), второй запрос будет INSERT в таблицу2 (время, работодатель, позиция). Значения («что-то», «что-то», «что-то»). Можете ли вы рассказать мне, как я могу пройти через все 8 строк и вставить их во вторую таблицу, и все они имеют одинаковый идентификатор пользователя, сгенерированный первой таблицей? Я все еще не уверен, как (WHERE Email = «email») должен работать, так как у меня нет способа узнать, что будет с электронной почтой, когда пользователь вводит ее электронную почту :( – nubicurio

1
Table 2 |Id| UserId | Time | Employer | Position | 

Это был бы правильный вариант, я думаю .. поскольку он создавал бы меньшую избыточность.

1

Из ответа Севага Акелиана вам нужно будет использовать соединение для получения данных. это будет что-то вроде этого

select u.userid, time, employer, position from user as u left join 
user_experience as ue on u.userid = ue.userid 

и если вы хотите получить данные для конкретного пользователя, просто используйте условию

select u.userid, time, employer, position from user as u left join 
    user_experience as ue on u.userid = ue.userid 
where userid = 1 
+0

Не могли бы вы помочь мне с инструкцией «Вставить» для PHP при отправке формы? Это то, где у меня возникают проблемы с ... – nubicurio

+0

Вам нужно будет использовать два запроса на вставку. для пользователя t и тогда вам нужно будет получить идентификатор пользователя (max id или mysql_insert_id). Затем используйте этот идентификатор для вставки записей в таблицу user_experience. Если вы можете предоставить точную схему таблицы, я могу вам помочь –

+0

Извините за мой поздний ответ; были в течение нескольких дней. Я собираюсь открыть новую тему, как просил Педро. Я выяснил, как сделать то, что вы предложили, но столкнулся с новой проблемой. Еще раз спасибо g.b.1981! – nubicurio

Смежные вопросы