14. februar 2012 - 22:22Der er
6 kommentarer og 1 løsning
Join og order
Hej
Jeg vil gerne JOINE 2 tabeller og have ORDER BY kategori. Men for hver kategori der findes, skal tabel_1 have prioritet:
SQL = "SELECT headline, kategori FROM tabel_1 where dbdata like '%"&q&"%' ORDER BY kategori
SQL = "SELECT headline, kategori FROM tabel_2 where dbdata like '%"&q&"%' ORDER BY kategori
Mit output kan fx se sådan ud:
AAAAAAAAAAAAAAA <-- kategori 1 aaaaaaaaaaa <-- headline data fra tabel_1 bbbbbbbbbbb <-- headline data fra tabel_1 ccccccccccc <-- headline data fra tabel_1 aaaaaaaaaaa <-- headline data fra tabel_2 bbbbbbbbbbb <-- headline data fra tabel_2 ccccccccccc <-- headline data fra tabel_2
BBBBBBBBBBBBBBB <-- kategori 2 aaaaaaaaaaa <-- headline data fra tabel_1 aaaaaaaaaaa <-- headline data fra tabel_2 bbbbbbbbbbb <-- headline data fra tabel_2 ccccccccccc <-- headline data fra tabel_2
CCCCCCCCCCCCCCC <-- kategori 3 aaaaaaaaaaa <-- headline data fra tabel_1 bbbbbbbbbbb <-- headline data fra tabel_1 ccccccccccc <-- headline data fra tabel_1 aaaaaaaaaaa <-- headline data fra tabel_2
Som jeg forstår det returnerer den kun hvis der er mindst et match i begge tabeller - det skal der nødvendigvis ikke være i mit setup ;)
mit output er baseret på kategorier fra begge tabeller outputtes alfabetisk - og når tilfældet er at der er match fra begge tabeller, skal tabel_1 prioriteres over tabel_2 i ORDER BY. - også alfabetisk.
Fx hvis der i kategorien CYKEL bliver fundet 3 poster i tabel_1 og 2 poster i tabel_2, og tilsvarende i CYKELSTATIVER skal outputtet være:
CYKEL 1) a cykel fra tabel_1 2) b cykel fra tabel_1 3) c cykel fra tabel_1 - - - - - - - - - - - 4) a cykel fra tabel_2 5) b cykel fra tabel_2
CYKELSTATIV 1) a cykelstativ fra tabel_1 2) b cykelstativ fra tabel_1 3) c cykelstativ fra tabel_1 - - - - - - - - - - - - - - 4) a cykelstativ fra tabel_2 5) b cykelstativ fra tabel_2
Det falder mig svært at følge dig. Fra de queries du viser i dit oprindelige spørgsmål ser det ud til, at tabellerne har (mindst) tre kolonner, headline, kategori, og dbdata, og det er i dbdata du søger efter ord der inderholder for eksempel cykel. Men i #2 ser det ud til, at det er i kolonnen kategori du søger efter ord like cykel. Jeg går i det følgende ud fra, at dine queries skulle have været noget med
SELECT headline, kategori FROM tabel_1 WHERE kategori LIKE '%cykel%'
Så går jeg ud fra, at i outputtet i #2 a, b, og c er headlines og cykel og cykelstativ er kategorier.
Hvis jeg har forstået alt det nogenlunde korrekt, så skal du føje tabellerne sammen med UNION snarere end med JOIN. Hvis du så i outputtet vil kunne se hvilken tabeller rækkerne kommer fra, så må tabellerne have en kolonne der identificerer tabellen.
Jeg prøvede for test at lave disse to tabeller med de følgende værdier
CREATE TABLE diktator1(tabel VARCHAR(20), head VARCHAR(10), kategori VARCHAR(20)); CREATE TABLE diktator2(tabel VARCHAR(20), head VARCHAR(10), kategori VARCHAR(20));
INSERT INTO diktator1 VALUES('fra tabel 1', 'a', 'cykel'); INSERT INTO diktator1 VALUES('fra tabel 1', 'b', 'cykel'); INSERT INTO diktator1 VALUES('fra tabel 1', 'c', 'budcykel'); INSERT INTO diktator1 VALUES('fra tabel 1', 'd', 'cykelstativ'); INSERT INTO diktator1 VALUES('fra tabel 1', 'e', 'knallert'); INSERT INTO diktator2 VALUES('fra tabel 2', 'f', 'cykel'); INSERT INTO diktator2 VALUES('fra tabel 2', 'g', 'budcykel'); INSERT INTO diktator2 VALUES('fra tabel 2', 'h', 'budcykel'); INSERT INTO diktator2 VALUES('fra tabel 2', 'i', 'bil'); INSERT INTO diktator2 VALUES('fra tabel 2', 'j', 'cykelstativ');
Så kørte jeg denne query:
SELECT id, headline, kategori, tab FROM diktator1 WHERE kategori LIKE '%cykel%' UNION SELECT id, headline, kategori, tab FROM diktator2 WHERE kategori LIKE '%cykel%' ORDER BY kategori, tab;
og jeg fik dette output. Er det hvad du er ude efter?
head kategori tabel c budcykel fra tabel 1 h budcykel fra tabel 2 g budcykel fra tabel 2 b cykel fra tabel 1 a cykel fra tabel 1 f cykel fra tabel 2 d cykelstativ fra tabel 1 j cykelstativ fra tabel 2
Men du synes at have to tabeller med identisk struktur. Hvis det er tilfældet, hvorfor placerer du så ikke det hele i en enkelt tabel? Det ville synes at være simplere. Eller er det mig der ikke har forstået det_
Synes godt om
Slettet bruger
15. februar 2012 - 09:20#5
Hej Christian
Det ligner det jeg er ude efter til forveksling ;o) Men jeg forstår ikke din ORDER BY kategori, tab; hvad er 'tab'..?
Ja, jeg har 2 næsten identiske tabeller. Den ene med statisk data, og den anden med dynamisk data - jeg vil gerne holde dem adskilt. Jeg vil gerne i søgeresulterne have det dynamiske indhold vist først. Dvs hvis man søger på 'cykel' får man som du også har sat op, og hvor tabel_1 repræsenterer det dynamsike content som 1. prioritet i hver kategori.
Nej, det skulle have været tabel. I den test jeg stillede op kaldte jeg den kolonne tab fordi jeg var doven. Du vil have resultaterne ordnet først efter categori, altså alle CYCEL før CYCELSTATIV, men hvis der er flere CYCEL skal de fra tabel 1 komme først. For at kunne ordne per tabel må hver række indholde tabellens navn.
Synes godt om
Slettet bruger
15. februar 2012 - 09:37#7
Jeg fik det løst - tak for det :)
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.