Tänkte försöka ge mig på att skapa något slags script så jag kan sortera filmtitlar efter år, namn och så vidare. Men det här med php och databaser är som jag sagt tidigare, är inte min grej riktigt.
CREATE TABLE `filmer` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT ,
`title` TEXT NOT NULL ,
`year` TEXT NOT NULL ,
`imdb` TEXT NOT NULL ,
`vote` TEXT NOT NULL
)
Det där funkar ju inte så bra tydligen, när man ska skapa så får jag felmeddelandet:
#1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key
Det säger mig ingenting...
Kan någon ge mig förslag på vad jag ska sätta för värden på varje kolumn?
id - den skapar ett värde automatiskt va?
title - The Ring
year - 1990
imdb - http://imdb.com/filmtitelid/
vote - 8
Ungefär sådär kommer det se ut när jag fyller i det. Vad jag då behöver hjälp med är hur tabellen ska se ut. "TEXT NOT NULL" kan man ju inte ha på alla...
CREATE TABLE `filmer` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT ,
`title` TEXT NOT NULL ,
`year` TEXT NOT NULL ,
`imdb` TEXT NOT NULL ,
`vote` TEXT NOT NULL ,
[b]PRIMARY KEY ( `id` )[/b]
)
i imdb-kolumnen skulle jag bara spara filmens imdb-nummer, inte hela urlen. Blir massa onödig data att spara annars.
Flyttas från PHP!
/r "title" skulle jag köra datatypen varchar på istället, year skulle jag köra datatypen smallint, imdb kan vi sätta varchar på igen och vote (betyg 1-10?) tinyint.
r\ Peeer: När jag ändrade title till varchar så säger den "This is not a number!". Ska jag ange hur många tecken filmnamnet får innehålla där eller vad?
Du verkar inte ha speciellt mycket kunskap om just SQL.
Det vore väl kanske en idé att du läser på lite i manualen?
Detta är inte för att vara taskig, men ALLT står ju där i vad gäller dina hittills uppkomna problem.
varchar måste alltid sättas till ett tal på hur många tecken kan vara upp till.
char måste alltid sättas till ett tal på hur många tecken strängen alltid ska vara.
int/tinyint/smallint/whateverint är god praxis om du anger maxvärde. ett id-nummer har som de-facto standard att ha 11 som max antal. (alltså 11 bytes).
Om man i Mysql anger int(11) så påverkar det inte vilka värden som kan lagras. Det går inte att lagra värdet 99999999999 i en kolumn som är definierad som int(11) så du har missförstått det där.
Om man anger int(1) så går det att lagra samma värden som om man angett int(11) så att ange något värde är irrelevant (om man inte använder zerofill) och vilseledande.
Om man i Mysql anger int(11) så påverkar det inte vilka värden som kan lagras. Det går inte att lagra värdet 99999999999 i en kolumn som är definierad som int(11) så du har missförstått det där.
Om man anger int(1) så går det att lagra samma värden som om man angett int(11) så att ange något värde är irrelevant (om man inte använder zerofill) och vilseledande.
Kan du förklara det lite närmre då? Vad står sifforna för?
Det finns mycket gottis att läsa på mysql.com, bland annat svaret på din fråga:
Another extension is supported by MySQL for optionally specifying the display width of an integer value in parentheses following the base keyword for the type (for example, INT(4)). This optional display width specification is used to left-pad the display of values having a width less than the width specified for the column.
The display width does not constrain the range of values that can be stored in the column, nor the number of digits that will be displayed for values having a width exceeding that specified for the column.
When used in conjunction with the optional extension attribute ZEROFILL, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(5) ZEROFILL, a value of 4 is retrieved as 00004. Note that if you store larger values than the display width in an integer column, you may experience problems when MySQL generates temporary tables for some complicated joins, because in these cases MySQL trusts that the data did fit into the original column width.
256 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe