[SQL] Select From... Probleem

Pagina: 1
Acties:

  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Ik heb een supergrote tabel in een Access database, deze roep ik via ASP / SQL in een webbased omgeving aan. Nu is mijn vraag of ik de WHERE statement kan laten gelden voor een hele grote reeks kolomen, want ik moet er een stuk of 80 aanspreken.

De enkelvoudige Query:

SELECT Name FROM Maps WHERE C11 = 'Black'

Die werkt prima natuurlijk, maar er is ook een kolom met de naam C12 en C13 en C14 etc etc... Tot en met een C99!, en daar moet ook naar gekeken worden.

Voor zover mijn SQL kennis gaat kan ik vast geen range opgeven voor de Query, zoals 'WHERE C11 <-> C99'. Toch is dat wel de bedoeling, want elke keer een 'AND WHERE C12 =' etc etc toevoegen lijkt mij ook niet de manier, want dan krijg ik een SQL query van onmenselijke grootte :).

Iemand een idee?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:42

gorgi_19

Kruimeltjes zijn weer op :9

Een betere databasestructuur bouwen? Wat ik zou hoor, lijken de tabellen C11 tot en met C99 erg op elkaar (zo niet: zijn hetzelfde); in plaats van de breedte (meer kolommen) had je moeten kiezen voor meer rijen

Sowieso moet je in de huidige situatie OF je query dynamisch opbouwen (scheelt jouw tiktijd, maar de query blijft even groot) of eenmaal alles typen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Hmm, das pech hebben, de databasestructuur ombouwen kan echt niet, deze kan alleen maar op deze manier goed weergegeven worden.

Maar goed, ik ga wel een Query van 100 regels maken :), lekker performance slurpen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:42

gorgi_19

Kruimeltjes zijn weer op :9

Mozin schreef op 15 augustus 2002 @ 11:04:
Hmm, das pech hebben, de databasestructuur ombouwen kan echt niet, deze kan alleen maar op deze manier goed weergegeven worden.
Gewoon puur uit nieuwsgierigheid: Hoezo kan dat niet? Met query's kan je toch een hele hoop oplossen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Je moet de tabel als een 'schaakbord' zien, elk vakje heeft zijn eigen properties en elke rij is dus 1 'schaakbord'. Er zijn meerdere rijen, dus ook meerdere van dit soort 'schaakborden' in de tabel.

Een omschakeling naar een andere structuur zou grote gevolgen hebben, omdat de rest van de site die er omheen zit er inmiddels erg afhankelijk van geworden is.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:42

gorgi_19

Kruimeltjes zijn weer op :9

Ah, ik snap het.. Een beetje laat: Maar met een extra tabel "Schaakborden" had je een hoop problemen kunnen voorkomen. Deze had je kunnen joinen met jouw vakjes.

In ieder geval wel nog veel succes!

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Ja, de Query zegt nu "Expression Too Complex" :)

Maar goed, ik vind wel een work around met een extra tabelletje erbij.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dan kan het nog steeds in een andere tabellayout :)
tabel schaakborden -> schaakbordid, schaakbordnaam
tabel schaakbordvelden -> schaakbordid, veldlocatie, veldwaarde

Etc :)

  • VisionMaster
  • Registratie: Juni 2001
  • Laatst online: 18-07 20:32

VisionMaster

Security!

ik sluit me aan bij ACM

Dit is geen database bouwen, maar misbruiken.

Maar ja... Ik snap de lay-out niet helemaal, volgens mij heb je een platte structuur of zo? alles in 1 Tabel :? Niet echt handig voor je perfomance.
Volgens mij kan je de zaak veel sneller maken als je je database ontwerp veranderd of iig hier duidelijker post voor een mogelijke oplossing.
Je kan namelijk nu geen gebruik maken van indexen of andere perfomance winstgevende zaken.

Je kan welligd beter in een file structuur gaan werken met een enorme record structuur om sneller te kunnen werken.

PS: NFI ... geef es meer gegevens ik vind het wel spannend als iemand zegd dat iets niet kan ;)

I've visited the Mothership @ Cupertino


Verwijderd

Ik ben ook voor een andere model maar om op je rpobleem terug te komen, je kan toch wel een query dynamisch laten genereren?

vb in php:
PHP:
1
2
3
4
$q = "WHERE q11 = 'waarde'";
for($i=12;$i<100;$i++){
  $q .= " AND q" . $i . " = 'waarde'";
}

  • alley
  • Registratie: Mei 2002
  • Laatst online: 01-09 14:55

alley

ahuh

Ik weet niet hoe het in Access werkt, maar het zal vast wel kunnen (als je echt geen ander model kan gebruiken):
Neem de laatste 2 karakters als substring, convert die naar een int, en zeg dat die int tussen 11 en 99 moet liggen
In SQL Server zou het in ieder geval kunnen, Access weet ik dus niet zeker.

I am always doing that which I can not do, in order that I may learn how to do it. (Pablo Picasso)


  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Ik zeg ook niet dat het technisch niet anders kan, maar de ombouw gaat teveel tijd kosten omdat ik dan tientallen ASP files door moet lopen om deze drastisch te wijzigen dan. Dus ik houd lekker vast aan mijn huidige lay-out :).

Maar goed, de kwestie is enigzins opgelost met een cheap-ass work-around, d.m.v. een extra tabelletje die ik af en toe aanspreek waar nodig en op een aantal zaken dus overeenkomt met de grote tabel.

Om toch nog even tegen jullie in te gaan. Is het echt beter om bijvoorbeeld ACM's structuur te gebruiken dan een grote tabel? Want als ik bijvoorbeeld 10 entries in mijn tabel heb, zijn dat maar 10 rows en met een andere structuur wordt dat heel uitgebreid verdeeld over meerdere tabellen met superlange kolommen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

De hoeveelheid data die je opslaat zal weinig veranderen, dus daar hoef je het niet om te laten.

10x100 rows van 3 velden breed is natuurlijk meer dan 10 rows van 103 velden breed, maar je hebt ineens wel een toegankelijkheid voor je data waarmee je veel meer kan.
Als je in je schaakbord wilt vinden waar de Zwarte koningin staat kan je dat in je huidige oplossing alleen met een enorm grote en vervelende query achterhalen waarbij je het resultaat ook nog eens met je applicatie-code moet afgrazen (welke van de 100 velden zit ie?)...

In mijn db-oplossing is dat een heel simpel selectje.

Verwijderd

Verwijderd schreef op 15 augustus 2002 @ 18:28:
Ik ben ook voor een andere model maar om op je rpobleem terug te komen, je kan toch wel een query dynamisch laten genereren?

vb in php:
PHP:
1
2
3
4
$q = "WHERE q11 = 'waarde'";
for($i=12;$i<100;$i++){
  $q .= " AND q" . $i . " = 'waarde'";
}
Maar hij wil het in asp :)

code:
1
2
3
4
5
6
7
8
9
10
<%
begin = "11"
eind = "99"

Do while begin < (kan ook =< zijn) eind
SELECT Name FROM Maps WHERE C" & begin & " = 'Black'
begin = begin + 1
'meer zooi
loop
%>

Je kunt begin en eind natuurlijk zelf een variable geven, of dmv Request.Form de getallen via een form aangeven :)
(ik heb em niet getest maar ik denk dat ie zo wel zal werken :)

Verwijderd

*Schop*

Nog ff een update, want mijn bovenstaande asp bestandje wilde niet helemaal werken, daarom heb ik em ff aangepast en hier staat het restultaat;
source:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
begin = "11"
eind = "99"
begin = CInt(begin)
eind = CInt(eind)

Do while begin =< eind
sql="SELECT Name FROM Maps WHERE C" & begin & " = 'Black'"
Response.Write sql & "<br>"
begin=begin+1
loop
%>

Verwijderd

Omdat ik denk dat mijn bovenstaande post niet helemaal je bedoeling is heb ik ff snel dynamisch de hele sql statement ff laten maken (Ga em zelf natuurlijk niet typen :+) en hier is tie dan:
code:
1
"SELECT Name FROM Maps WHERE C11 = 'Black' AND WHERE C12 = 'Black' AND WHERE C13 = 'Black' AND WHERE C14 = 'Black' AND WHERE C15 = 'Black' AND WHERE C16 = 'Black' AND WHERE C17 = 'Black' AND WHERE C18 = 'Black' AND WHERE C19 = 'Black' AND WHERE C20 = 'Black' AND WHERE C21 = 'Black' AND WHERE C22 = 'Black' AND WHERE C23 = 'Black' AND WHERE C24 = 'Black' AND WHERE C25 = 'Black' AND WHERE C26 = 'Black' AND WHERE C27 = 'Black' AND WHERE C28 = 'Black' AND WHERE C29 = 'Black' AND WHERE C30 = 'Black' AND WHERE C31 = 'Black' AND WHERE C32 = 'Black' AND WHERE C33 = 'Black' AND WHERE C34 = 'Black' AND WHERE C35 = 'Black' AND WHERE C36 = 'Black' AND WHERE C37 = 'Black' AND WHERE C38 = 'Black' AND WHERE C39 = 'Black' AND WHERE C40 = 'Black' AND WHERE C41 = 'Black' AND WHERE C42 = 'Black' AND WHERE C43 = 'Black' AND WHERE C44 = 'Black' AND WHERE C45 = 'Black' AND WHERE C46 = 'Black' AND WHERE C47 = 'Black' AND WHERE C48 = 'Black' AND WHERE C49 = 'Black' AND WHERE C50 = 'Black' AND WHERE C51 = 'Black' AND WHERE C52 = 'Black' AND WHERE C53 = 'Black' AND WHERE C54 = 'Black' AND WHERE C55 = 'Black' AND WHERE C56 = 'Black' AND WHERE C57 = 'Black' AND WHERE C58 = 'Black' AND WHERE C59 = 'Black' AND WHERE C60 = 'Black' AND WHERE C61 = 'Black' AND WHERE C62 = 'Black' AND WHERE C63 = 'Black' AND WHERE C64 = 'Black' AND WHERE C65 = 'Black' AND WHERE C66 = 'Black' AND WHERE C67 = 'Black' AND WHERE C68 = 'Black' AND WHERE C69 = 'Black' AND WHERE C70 = 'Black' AND WHERE C71 = 'Black' AND WHERE C72 = 'Black' AND WHERE C73 = 'Black' AND WHERE C74 = 'Black' AND WHERE C75 = 'Black' AND WHERE C76 = 'Black' AND WHERE C77 = 'Black' AND WHERE C78 = 'Black' AND WHERE C79 = 'Black' AND WHERE C80 = 'Black' AND WHERE C81 = 'Black' AND WHERE C82 = 'Black' AND WHERE C83 = 'Black' AND WHERE C84 = 'Black' AND WHERE C85 = 'Black' AND WHERE C86 = 'Black' AND WHERE C87 = 'Black' AND WHERE C88 = 'Black' AND WHERE C89 = 'Black' AND WHERE C90 = 'Black' AND WHERE C91 = 'Black' AND WHERE C92 = 'Black' AND WHERE C93 = 'Black' AND WHERE C94 = 'Black' AND WHERE C95 = 'Black' AND WHERE C96 = 'Black' AND WHERE C97 = 'Black' AND WHERE C98 = 'Black' AND WHERE C99 = 'Black'"

srry voor de lap

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 31-08 21:58

Delphi32

Heading for the gates of Eden

Niet iedere keer de WHERE herhalen, maar zo:
code:
1
SELECT Name FROM Maps WHERE C11 = 'Black' AND C12 = 'Black'...

FF je loopje aanpassen dus.

Verwijderd

Delphi32 schreef op 19 augustus 2002 @ 20:45:
Niet iedere keer de WHERE herhalen, maar zo:
code:
1
SELECT Name FROM Maps WHERE C11 = 'Black' AND C12 = 'Black'...

FF je loopje aanpassen dus.
|:(

Ik zal nu niet die hele lap hier pasten, maar de loop :)
Komt er zo aan...

VOORBEELD
SOURCE:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%
begin = "11"
eind = "99"
begin = CInt(begin)
eind = CInt(eind)

sql="SELECT Name FROM Maps WHERE C" & begin & " = 'Black' " 
Do while begin < eind
begin=begin+1
sql = sql + " AND C" & begin & " = 'Black' "
loop
Response.Write sql
'In plaats van de sql te schrijven kun je hier verder gaan met je sql gedoe... :)
%>

Hehe, nu denk ik dat ie wel goed is :)
Heeft ik topicstarter nu geholpen of niet?

  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Zeker :)

Maar ik ben na zulke queries wel overtuigd dat mijn DB skills ver te zoeken zijn...

Verwijderd

Mozin schreef op 21 augustus 2002 @ 11:41:
Zeker :)

Maar ik ben na zulke queries wel overtuigd dat mijn DB skills ver te zoeken zijn...
Lol, ik denk het niet hoor...om zon query in elkaar te zetten heb jij al genoeg db skills, het ging hier om het dynamisch aanmaken van die query, en dan zijn meer asp\visual basic (vb) skills 8) :*)

  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Topicstarter
Ik bedoelde natuurlijk het gemis DB structuur skills,

want ASP ben ik natuurlijk de master in 8)
Pagina: 1