25. september 2006 - 19:09Der er
46 kommentarer og 1 løsning
Hent poster fra tabel og sorter bagefter
Jeg har 2 tabeller i en access db.
Den ene indeholder en masse artikler, den anden en masse reletioner mellem artikler/artikler eller artikler/produkter.
Jeg skal så finde alle artikler der omhandler feks produkt 123. Jeg finder så en række poster i relation-tabellen, hvor produkt 123 er "hoved-personen". Jeg finder så de artikler der er relateret til, men de ligger jo i tilfældig orden og vil derfor ikke blive udskrevet i korrekt dato rækkefølge.
Så spørgsmålet lyder: Er det muligt at hente alle relateret artikler ud (uden af udskrive dem), for derefter at sortere efter feks dato og så først der udskrive dem ?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
OG så er der article-tabellen der indeholder hvad den nu skal indeholde... Jeg tjekker så på følgende måde og der er nogle relationer til det valgte produkt:
relFrom = "product#123" relTo = "article#"
strSQL = "Select * from inc_relations where (relRelatedFrom='" & relFrom & "' OR relRelatedTo='" & relFrom & "') AND (relRelatedFrom LIKE '" & relTo & "%' OR relRelatedTo LIKE '" & relTo & "%')"
Og så bliver posterne jo hentet ud iforhold til hvornår relationen blev lavet, men det behøver jo ikke være samme dag som artiklen er oprettet.
Jeg tror umiddelbart at den kan løses med noget i denne stil:
strSQL = " SELECT * FROM articles WHERE articleId IN ( (SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%') UNION (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%') ) ORDER BY datoFelt DESC "
Synes godt om
Slettet bruger
25. september 2006 - 21:55#8
Nåå okay, der var ændringen :) I sidste ende vil det så ikke give samme resultat? Har selvfølgelig ikke noget mod at sifte til dit forslag, men kan der blive problemer med min SQL eller er det bare rent synsmessigt du syntes det skal skiftes ud?
Logisk set er det ikke den samme forespørgsel. Den kan derfor give forskellige resultater alt efter værdierne af relFrom og relTo.
Synes godt om
Slettet bruger
25. september 2006 - 22:03#10
Nu har jeg lavet denne SQL, men jeg får en fejl der siger:
Der er en syntaksfejl, fordi der mangler en operator.
Kan ikke lige se at jeg har lavet nogen fejl, ved du hvad der kan være galt?
strSQL = " SELECT * FROM con_articles WHERE artID IN ( (SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%') UNION (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%') ) ORDER BY artDate DESC "
strSQL = "SELECT * FROM con_articles WHERE artID IN ((SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%') UNION (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%')) ORDER BY artDate DESC"
Er det den at du får fejlbeskeden i?
Synes godt om
Slettet bruger
25. september 2006 - 22:06#12
For lige at beskrive indholdet af min relation-tabel
En tilfældig linie kan se sådan ud:
product#1 | article#56
Men SQL'en skal også køre den anden vej, altså hvis den samme linie så sådan ud:
Lidt handikappet af at jeg ikke har en Access ved hånden, så det bliver ud fra hukommelsen:
Først udskriver du din SQL på, sådan at du kan cut'n'pase den.
Så starter du Access og åbner databasen.
Du laver en ny Forespørgsel. Skifter over til SQL-visning, og paster så din SQL ind i denne. Så tryjjer du på eksekveringsknappen (vist nok den med "!").
(SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%') UNION (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%')
Synes godt om
Slettet bruger
25. september 2006 - 22:32#24
Det kan jeg godt, den opretter en forspørgsel med kollonnen relRelatedTo, men den indeholder ingen data.
SELECT * FROM con_articles WHERE artID IN ( (SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%') UNION (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%') )
Synes godt om
Slettet bruger
25. september 2006 - 22:38#26
Nu kommer den samme fejl igen. OG den vil ikke oprette forespørgslen...
Der er en syntaksfejl, fordi der mangler en operator.
SELECT * FROM con_articles WHERE artID IN ( SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%' UNION SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%' )
Synes godt om
Slettet bruger
25. september 2006 - 22:43#28
Nu får jeg en anden fejl:
Denne handling er ikke tilladt i underforespørgsler.
Hmmm, det er sikkert bare en lille dum syntaksfejl som jeg ikke lige kan gennemskue.
Men lad os da så prøve noget lidt andet i stedet:
strSQL = " SELECT * FROM con_articles WHERE artID IN ( SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%' ) OR artID IN ( SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%' ) ORDER BY artDate DESC "
Synes godt om
Slettet bruger
25. september 2006 - 22:52#30
Jeg gik ud fra at denne skulle testes i ASP.
Jeg får nu fejlen:
Datatyperne stemmer ikke overens i kriterieudtrykket.
Men de felter der er ibrug her ser alle ud til at stå rigtigt. relRelatedFrom = tekst-felt relRelatedTo = tekst-felt artID = autoID-felt artDate = Dato-felt
Kan du ikke lige prøve at poste den resulterende SQL her?
Synes godt om
Slettet bruger
25. september 2006 - 22:57#32
SELECT * FROM con_articles WHERE artID IN (SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = 'products#4' AND relRelatedTo LIKE 'news#%') OR artID IN (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = 'products#4' AND relRelatedFrom LIKE 'news#%') ORDER BY artDate DESC
Det er nu ikke helt en optimal måde at lave din database på.
Måske virker dette:
strSQL = " SELECT * FROM con_articles WHERE 'news#' & artID IN ( SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%' ) OR 'news#' & artID IN ( SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%' ) ORDER BY artDate DESC "
Synes godt om
Slettet bruger
25. september 2006 - 23:12#38
Hvad skal jeg gøre med din besked fra 25/09-2006 22:57:54. Hvis du ikke skal bruge artiklens autoID, hvad skal du så bruge ?
Har lige testet den og den ser faktisk ud til at virke. Men den laver bare fejl hvis der ikke er nogle artikler, selvom jeg har sat en EOF og BOF ind i min sætning.
For lige at vende tilbage til vores UNION for før... Mon ikke denne så virker:
strSQL = " SELECT * FROM con_articles WHERE 'news#' & artID IN ( (SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%') UNION (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%') ) ORDER BY artDate DESC "
Nej den virker ikke, den siger bare "Der er en syntaksfejl, fordi der mangler en operator."
Ja, go' nat :)
Synes godt om
Slettet bruger
25. september 2006 - 23:35#45
Har lige løst problemet med EOF og BOF, jeg havde får sat Do på den forkerte side af EOF/BOF-sætningen.
Og jeg bruger som sagt denne SQL, da den virker helt som den skal:
strSQL = " SELECT * FROM con_articles WHERE 'news#' & artID IN ( SELECT relRelatedTo FROM inc_relations WHERE relRelatedFrom = '" & relFrom & "' AND relRelatedTo LIKE '" & relTo & "%' ) OR 'news#' & artID IN (SELECT relRelatedFrom FROM inc_relations WHERE relRelatedTo = '" & relFrom & "' AND relRelatedFrom LIKE '" & relTo & "%' ) ORDER BY artDate DESC "
Her er så dine point og så siger jeg mange tak for hjælpen :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.