Gå til innhold

Anbefalte innlegg

Skrevet (endret)

Hei jeg lurte på ossen jeg får valgt den valuen i mysql databasen

jeg har

$brus_add = mysql_query("SELECT solgt FROM `1`");

men den funker ikke...

 

post-135396-1242917576_thumb.png

Endret av GrusommeGabriel
Videoannonse
Annonse
Skrevet (endret)

Du har feil i SQL syntaksen din, og dessuten må du lese hvordan mysql_query fungerer.

 

Skal du hente ut verdien hvor ID = 1 så skriver du noe lignende dette:

SELECT DISTINCTROW solgt FROM tabell_navn WHERE ID = 1

Endret av GeirGrusom
Skrevet

Ut av nysgjerrighet, noen grunn til at DISTINCT ikke burde brukes? Enig i at det ikke burde være nødvendig hvis designet er godt, men ser likevel situasjoner der det kan være fornuftig.

Skrevet
Ut av nysgjerrighet, noen grunn til at DISTINCT ikke burde brukes? Enig i at det ikke burde være nødvendig hvis designet er godt, men ser likevel situasjoner der det kan være fornuftig.
Mange (inkludert siddis) har misforstått grunnen til at en ofte bør unngå distinct. Det har som regel ingenting med database design å gjøre, men med ytelse på spørringer. Enkelte spørringer kan yte bedre om man bruker en [NOT] EXISTS subquery i stedet for en DISTINCT.
Skrevet

Det har med database design å gjere då mange designer databaser som bruker duplikater i hutt og pine og *løyser* dette med å bruke DISTINCT

Skrevet
Det har med database design å gjere då mange designer databaser som bruker duplikater i hutt og pine og *løyser* dette med å bruke DISTINCT
Det KAN ha med databasedesign å gjøre, men det er feil å sette likhetstegn mellom DISTINCT og feil databasedesign.
Skrevet (endret)
Då er meg og mine kollegaer svært ueinig med din påstand :)
Og det har dere lov å være :)

 

Jeg vil allikevel påstå at bruk av DISTINCT har sjeldent med dårlig databasedesign å gjøre, og mest med spørringen å gjøre. Eksempel:

 

Tabell 'Employee' (pseudo SQL):

EmployeeId int PK

Name varchar(50)

ManagerId int null (FK references EmployeeId)

 

Oppgave: Finn alle ansatte som har noen under seg i organisasjonen.

Svaralternativ 1 ved å bruke EXISTS:

select e.*
from Employee e
where exists(select * from Employee m where m.ManagerId=e.EmployeeId)

 

Svaralternativ 2 ved å bruke DISTINCT:

select distinct e.*
from Employee e
inner join Employee m on m.ManagerId=e.EmployeeId

 

Er databasedesignet dårlig bare fordi jeg kan løse oppgaven ved å bruke DISTINCT? Den eneste ulempen ved å bruke DISTINCT her er sannsynligvis ytelsen, selv om moderne DBMS vil sannsynligvis velge samme execution plan for begge disse spørringene.

 

Ordet er ditt/deres...

 

edit: og hvis vi ikke blir enige (dvs. at jeg har rett) så får vi møtes utenfor Snadderbua på Sola for et oppgjør ;)

 

edit 2: byttet om tittel for svaralternativ 1 og 2.

Endret av kaffenils
Skrevet

Det der er ikkje dårleg databasedesign!

 

Ta heller dette eksempelet:

 

Tabell document

 

id int PK

name varchar

document_type varchar

 

Tabellen har 100000000 rader, nå skal du hente ut alle typene(uten duplikater)

Då er det klart at det lønner seg å redesigne databasen.

Skrevet

Helt enig med deg i det eksempelet ditt sIDDIs. Det jeg er uenig i er at bruk av distinct i spørringer ofte er resultat av dårlig databasedesign.

 

Ta eksempelet ditt med dokument_type, men la oss for ordens skyld flytte document_type ut i en egen tabell, og heller ha en FK kolonne av type int i document tabellen.

Oppgaven med å finne ut hvilke dokumenttyper som er brukt kan løses med DISTINCT, men vil sannsynligvis være mye mer effektiv ved å SELECT fra dokumenttype tabellen og bruke EXISTS med subquery mot dokumenttabell. Om man velger å bruke DISTINCT eller EXISTS for å løse oppgaven så er det ikke databasemodellen det er noe galt med, derimot er det ressurskrevende å bruke DISTINCT.

 

Konklusjon: Bruk av DISTINCT skyldes som regel IKKE dårlig databasemodell, men dårlig forståelse av hva som skjer under panseret hos DBMSet.

Skrevet

Konklusjonen er ihvertfall at hvis du må bruke DISTINCT for å få en spørring til å returnere de dataene du vil, så burde du gjøre følgende:

- Sjekk om spørringen kan løses bedre med [NOT] EXISTS

- Sjekk om det kan lønne seg å redesigne databasen

 

Hvis du har mye data i databasen fra før av og kun skal skrive en ny spørring kan du sjekke hvor lang tid spørringen tar å kjøre før du gjør noen av disse sjekkene.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...