Kom ihåg mig?
Home Menu

Menu


SQL-problem

Ämnesverktyg Visningsalternativ
Oläst 2006-10-22, 16:53 #1
pellebannan pellebannan är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2006
Inlägg: 3
pellebannan pellebannan är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2006
Inlägg: 3
Hej.

Jag använder följande sats:

SELECT * FROM medlemmar WHERE TRIM = 'Ja' AND RAS1 = 'DS' OR RAS2 = 'DS' OR RAS3 = 'DS' ORDER BY 'POSTADRESS'

I tabellen finns även ett fält som heter "MEDLEMTILL" som är i "DATE"-format. Där finns det datum där medlemmsskapet upphör. Hur skriver jag i satsen ovan för att INTE välja dom medlemmar där medlemmsskapet har upphört.

/peter
pellebannan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-22, 17:01 #2
elofssons avatar
elofsson elofsson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jul 2004
Inlägg: 881
elofsson elofsson är inte uppkopplad
Mycket flitig postare
elofssons avatar
 
Reg.datum: Jul 2004
Inlägg: 881
MEDLEMTILL < NOW()
elofsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 08:13 #3
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Snarare MEDLEMTILL > NOW() för att välja bara de medlemmar där medlemskapet inte upphört.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 08:16 #4
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by pellebannan@Oct 22 2006, 16:53
Hej.

Jag använder följande sats:

SELECT * FROM medlemmar WHERE TRIM = 'Ja' AND RAS1 = 'DS' OR RAS2 = 'DS' OR RAS3 = 'DS' ORDER BY 'POSTADRESS'

I tabellen finns även ett fält som heter "MEDLEMTILL" som är i "DATE"-format. Där finns det datum där medlemmsskapet upphör. Hur skriver jag i satsen ovan för att INTE välja dom medlemmar där medlemmsskapet har upphört.

/peter
Får jag bara anmärka på "TRIM='Ja'". Jag antar att alternativet är "TRIM='Nej'", dvs du försöker lagra boolean. För boolean lämpar sig tinyint(1) bättre än (var)char .

Nu kanske du har också "Kanske" som ett val, men jag har iallafall sagt vad jag tänkte .
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 08:16 #5
jon jon är inte uppkopplad
Medlem
 
Reg.datum: Jul 2005
Inlägg: 84
jon jon är inte uppkopplad
Medlem
 
Reg.datum: Jul 2005
Inlägg: 84
Du bör nog även ha några paranteser...
SELECT * FROM medlemmar WHERE TRIM = 'Ja' AND (RAS1 = 'DS' OR RAS2 = 'DS' OR RAS3 = 'DS') ORDER BY 'POSTADRESS'
jon är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 14:20 #6
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Citat:
Ursprungligen postat av zoran
Citat:
Ursprungligen postat av pellebannan
Hej.

Jag använder följande sats:

SELECT * FROM medlemmar WHERE TRIM = 'Ja' AND RAS1 = 'DS' OR RAS2 = 'DS' OR RAS3 = 'DS' ORDER BY 'POSTADRESS'

I tabellen finns även ett fält som heter "MEDLEMTILL" som är i "DATE"-format. Där finns det datum där medlemmsskapet upphör. Hur skriver jag i satsen ovan för att INTE välja dom medlemmar där medlemmsskapet har upphört.

/peter
Får jag bara anmärka på "TRIM='Ja'". Jag antar att alternativet är "TRIM='Nej'", dvs du försöker lagra boolean. För boolean lämpar sig tinyint(1) bättre än (var)char .

Nu kanske du har också "Kanske" som ett val, men jag har iallafall sagt vad jag tänkte .
Skall man optimera som mest så kan du skapa en CHAR(0) NULL.
Är den NULL så är det falskt och är den tom (inte NULL då) så är det sant.

Tar bara upp en bit istället för dina oändligt stora åtta bit
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 15:32 #7
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
Pedagogiskt är väl snarare ENUM('ja','nej','kanske') även om det tar hela tar sina åtta bit... Att använda VARCHAR är ju genomkasst men jag misstänker att CHAR(0) blir lite opraktiskt om man inte måste optimera ändlöst... ENUM är ju också praktiskt genom att man kan ställa querien på samma sätt som om det vore en textsträng utan att ändra något. Dessutom vet jag inte hur många gånger jag har trott att ja/nej räcker bara för att senare vara tvungen att ändra till 'kanske','vet ej','snart','ibland'... Där är ENUM oslagbart. Och den lilla tyngden som 8 bitar utgör är knappast ett problem.

Edit: ENUM() och SET() är verkligen underskattade har jag en känsla av. När man går tillbaks till en tabell med CHAR(0) efter ett halvår (eller får en tabell som någon annan skapat) så är risken stor att man inte fattar ett jota av hur man tänkt. Roligt som kuriosa dock...
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 15:56 #8
pellebannan pellebannan är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2006
Inlägg: 3
pellebannan pellebannan är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2006
Inlägg: 3
Det är löst!
Så här blev det:
SELECT * FROM medlemmar WHERE TRIM = 'Ja' AND (RAS1 = 'DS' OR RAS2 = 'DS' OR RAS3 = 'DS') AND MEDLEMTILL > NOW() ORDER BY 'POSTADRESS'

/peter
pellebannan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 16:12 #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
Liten kommentar till den egentliga frågan:
Citat:
Originally posted by pellebannan@Oct 23 2006, 15:56
Hur skriver jag i satsen ovan för att INTE välja dom medlemmar där medlemmsskapet har upphört.
Om du inte har satt något datum på dem som fortfarande är medlemmer så är det NULL om du har DEFAULT NULL så kan du också använda … WHERE medlemtill IS NULL (eftersom de ännu inte har något slutdatum). Borde i alla fall vara lite snabbare.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-10-23, 19:19 #10
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Citat:
Originally posted by martine@Oct 23 2006, 15:32
Pedagogiskt är väl snarare ENUM('ja','nej','kanske') även om det tar hela tar sina åtta bit... Att använda VARCHAR är ju genomkasst men jag misstänker att CHAR(0) blir lite opraktiskt om man inte måste optimera ändlöst... ENUM är ju också praktiskt genom att man kan ställa querien på samma sätt som om det vore en textsträng utan att ändra något. Dessutom vet jag inte hur många gånger jag har trott att ja/nej räcker bara för att senare vara tvungen att ändra till 'kanske','vet ej','snart','ibland'... Där är ENUM oslagbart. Och den lilla tyngden som 8 bitar utgör är knappast ett problem.

Edit: ENUM() och SET() är verkligen underskattade har jag en känsla av. När man går tillbaks till en tabell med CHAR(0) efter ett halvår (eller får en tabell som någon annan skapat) så är risken stor att man inte fattar ett jota av hur man tänkt. Roligt som kuriosa dock...
Ja visst är det kuriosa och jag måste ju erkänna att jag aldrig använder CHAR(0) NULL och knappast skulle komma på tanken heller .
SET och ENUM är dom två jag använder mest.
Handlar det t.ex. om att en eller flera värden kan vara valda så är det ju SET som uteslutande gäller, annars för ja/nej är det ENUM eller TINYINT. Jag arbetar hellre med INT(i alla sina storlekar) än CHAR ('value') eftersom min erfarenhet är att numeriska värden alltid går snabbare att jobba med gentemot databasen.
Jake.Nu ä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 04:24.

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