2016-06-27 6 views
1

У меня есть webapp, который я создаю. Этот webapp будет принимать в качестве входных данных некоторые продукты (автомобили, мото, лодки, дома и т. Д.), И каждый продукт будет иметь одну или несколько фотографий, связанных с ним. Идентификатор каждой фотографии генерируется функцией uniqid() php.Имея более одного значения, вставленного в тот же столбец

Моя проблема: я не могу показаться, чтобы соответствовать более двух id_photos в той же колонке

+-----------+------------------------------------------+------+-----+---------+----------------+ 
| Field  | Type          | Null | Key | Default | Extra   | 
+-----------+------------------------------------------+------+-----+---------+----------------+ 
| carid  | int(11)         | NO | MUL | NULL | auto_increment | 
| brand  | enum('Alfa Romeo','Aston Martin','Audi') | NO |  | NULL |    | 
| color  | varchar(20)        | NO |  | NULL |    | 
| type  | enum('gasoline','diesel','eletric')  | YES |  | NULL |    | 
| price  | mediumint(8) unsigned     | YES |  | NULL |    | 
| mileage | mediumint(8) unsigned     | YES |  | NULL |    | 
| model  | text          | YES |  | NULL |    | 
| year  | year(4)         | YES |  | NULL |    | 
| id_photos | varchar(30)        | YES |  | NULL |    | 
+-----------+------------------------------------------+------+-----+---------+----------------+ 

То, что я хотел бы произойти что-то вроде этого: INSERT INTO cars(id_photos) values ('id_1st_photo', 'id_2nd_photo')

Ending вверх что-то вроде этого:

| 60 | Audi  | Yellow | diesel | 252352 | 1234112 | R8 | 1990 | id_1st_photo id_2nd_photo  | 

В конечном счете, мне нужно было бы взять эти фотографии из папок, в которых они находятся, что-то вроде этого: /var/www/website/$login/photos/id_of_photo с запросом select id_photos from cars where carid=$id.

Вы можете найти data types, который не является пропельно хорошим для данных, которые получит сервер, но я на неделю в mysql, и я буду беспокоиться о data types позже.

Прежде всего, я не знаю, возможно ли это, если это не то, как я могу создать что-то, чтобы работать так?

Я нашел этот вопрос, что совершенно так же моя, но я не могу показаться, чтобы реализовать что-то вроде этого: add multiple values in one column

+0

id_photos длина столбца 30. Пожалуйста, увеличьте значение –

+0

Подход связанного вопроса может быть реализован для вашей проблемы: Удалить id_photos из вашей таблицы. Создайте новую таблицу с двумя столбцами: carid и id_photo. Более поздняя таблица получает одну строку для каждого введенного вами идентификатора фотографии. Если вам нужен «полный» набор данных, вы должны использовать JOIN и/или/GROUP BY. Включение более одного значения в столбец вообще предотвращает или, по крайней мере, препятствует эффективному запросу этого столбца. – Sirko

+0

@Sirko Я вижу ваш подход, но как сервер узнает, что определенная фотография принадлежит определенному пользователю? Допустим, что этот пользователь добавляет две машины на сайт. Как сервер узнает, какие фотографии с первого автомобиля и фотографии со второго автомобиля? –

ответ

1

Вы можете легко адаптировать подход в связанном вопросе и даже удалить одну таблицу необходимо:

Вы первый стол остается почти то же самое, но имеет id_photos столбца удален:

+-----------+------------------------------------------+------+-----+---------+----------------+ 
| Field  | Type          | Null | Key | Default | Extra   | 
+-----------+------------------------------------------+------+-----+---------+----------------+ 
| carid  | int(11)         | NO | MUL | NULL | auto_increment | 
| brand  | enum('Alfa Romeo','Aston Martin','Audi') | NO |  | NULL |    | 
| color  | varchar(20)        | NO |  | NULL |    | 
| type  | enum('gasoline','diesel','eletric')  | YES |  | NULL |    | 
| price  | mediumint(8) unsigned     | YES |  | NULL |    | 
| mileage | mediumint(8) unsigned     | YES |  | NULL |    | 
| model  | text          | YES |  | NULL |    | 
| year  | year(4)         | YES |  | NULL |    | 
+-----------+------------------------------------------+------+-----+---------+----------------+ 

Тогда вы будете добавлять вторую таблицу, чтобы сохранить ссылки на фото идентификаторы:

+-----------+------------------------------------------+------+-----+---------+----------------+ 
| Field  | Type          | Null | Key | Default | Extra   | 
+-----------+------------------------------------------+------+-----+---------+----------------+ 
| carid  | int(11)         | NO | MUL | NULL |    | 
| id_photos | varchar(30)        | NO |  | NULL |    | 
+-----------+------------------------------------------+------+-----+---------+----------------+ 

Обе таблицы связаны полем carid (вы должны даже сделать carid во второй таблице внешним ключом, указывающим на тот, что указан в первой таблице).

Каждый id_photos затем приводит к появлению новой строки во второй таблице.

Чтобы запросить данные, которые вы, возможно, потребуется JOIN между двумя столами и, возможно, GROUP BY снова сводим результат в один ряд на carid, но это зависит от других usecases.

2

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

+0

Хотя ваш ответ хороший, я отметил, что Sirko отвечает как правильно, потому что он более полный и имеет объяснение. –

0

Вы можете вставить строку отформатирован Cо спаренной множественное имя фото

INSERT INTO cars(id_photos) values ('id_1st_photo, id_2nd_photo') 

Таким образом, вы don'have хорошо нормализованной структуры базы данных, так что вы имеете проблему retrive имя singole FOTO .. ​​

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

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