Kom ihåg mig?
Home Menu

Menu


MySQL lyder inte mig!

 
Ämnesverktyg Visningsalternativ
Oläst 2008-01-30, 20:10 #1
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
MySQL lyder inte mig :huh:

Detta är min query:
Kod:
SELECT *
FROM trainingbook_entries
WHERE user = '533915543'
OR user = '544576097'
OR user = '573490598'
OR user = '620155054'
OR user = '671980664'
OR user = '709760429'
OR user = '740625439'
OR user = '777390801'
OR user = '779794282'
OR user = '781018407'
AND date = '2008-01-30'
ORDER BY id DESC
LIMIT 0 , 30
Resultatet blir detta:


Som ni ser så har ingen av fälten "date" värdet 2008-01-30 ! <_<
Finns det något jag kan göra?

Tack på förhand!
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 20:25 #2
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Till att börja med borde du använda WHERE user IN(värde, värde, värde) istället för OR-frågan. Felet beror på att AND binder hårdare än OR. I det här fallet blir din fråga de första valen ELLER user = '781018407' AND date = '2008-01-30'. DU måste alltså lägga en parantes kring alla OR-grejerna.

Sedan känns det inte så smidigt att lagra ett heltal som en sträng heller...
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 20:25 #3
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Använda parentes.

Eller skriva den som
Kod:
SELECT *
FROM trainingbook_entries
WHERE user IN('533915543', '544576097', ...) AND date = '2008-01-30'
ORDER BY id DESC
LIMIT 0 , 30
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 20:43 #4
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Okej!
Tack så mycket, funkar utmärkt!
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 21:13 #5
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
När du villkorar ett värde som du vet är ett tal så ska du ta bort fnuttarna. Annars måste mysql slösa kraft på att göra om talet till en sträng innan jämförelsen.
...where user=123456 ska det vara och inte ...where user='123456'
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-31, 13:43 #6
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Magnus_A@Jan 30 2008, 22:13
När du villkorar ett värde som du vet är ett tal så ska du ta bort fnuttarna. Annars måste mysql slösa kraft på att göra om talet till en sträng innan jämförelsen.
...where user=123456 ska det vara och inte ...where user='123456'
Förutsatt att column-typen är heltal, om det är en sträng så bör den hämtas som en sträng.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-31, 14:24 #7
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Originally posted by martine@Jan 31 2008, 14:43

Förutsatt att column-typen är heltal, om det är en sträng så bör den hämtas som en sträng.
Precis, annars slösas kraften på att försöka göra om strängen till ett tal!
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-31, 21:55 #8
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Citat:
Originally posted by martine@Jan 31 2008, 14:43

Förutsatt att column-typen är heltal, om det är en sträng så bör den hämtas som en sträng.
Alla värderna som kommer att hämtas är nummer.
Tabellen är BigINT, är det smartare med user=123456 då?
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-31, 22:14 #9
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by KarlRoos@Jan 31 2008, 22:55
Alla värderna som kommer att hämtas är nummer.
Tabellen är BigINT, är det smartare med user=123456 då?
Tabellen är inte BIGINT (tabellen har stängar, datum och nummer som datatyper såvitt jag kan se), möjligtvis är columnen "user" en BIGINT och i så fall är det bättre att använda talet 123456 och inte strängen '123456'. Stängar anges med tecknet ' i SQL, tal som 5 eller 6.7 anges utan '

Det finns vissa skillnader mellan att använda strängar och tal inte bara i effektivitet och platsnyttjande. Vid strängar är exempelvis stängarna '001234', '01234' och '1234' helt skilda "värden". Om det hande om tal så är det ingen skillnad mellan 001234 och 1234. Samma sak gäller om du anger bråktal med eller utan '
Talet 234.3 är samma tal som 234.300 men strängen '234.3' är inte detsamma som '234.300'. Det kan förutom resursslöseri alltså även innebära svårupptäckta buggar.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-02-01, 17:04 #10
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Citat:
Originally posted by martine@Jan 31 2008, 23:14
Det finns vissa skillnader mellan att använda strängar och tal inte bara i effektivitet och platsnyttjande. Vid strängar är exempelvis stängarna 001234, 01234 och 1234 helt skilda värden. Om det hande om tal så är det ingen skillnad mellan 001234 och 1234. Samma sak gäller om du anger bråktal med eller utan
Talet 234.3 är samma tal som 234.300 men strängen 234.3 är inte detsamma som 234.300. Det kan förutom resursslöseri alltså även innebära svårupptäckta buggar.
Så om talen inte kommer att börja med nollor och inte ha några decimaler så är det bättre för effektiviteten?
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:20.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017