Hur formulera SQL-sats? Relationstabell..

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2003

Hur formulera SQL-sats? Relationstabell..

Halloj!

Jag har en databas som jag har lite problem att söka i. Har aldrig orkat bli något geni på SQL, och nu ångrar jag det lite..

De tabeller jag har är;

Table 1: artikel
id
title
text

Table 2: artikelKategori
artikelId
kategoriId

Table 3: artikelUser
artikelId
userId

Det innebär kort sagt att jag har en artikel, och sedan två relationstabeller där jag anger vilka kategorier som hör till artikeln, samt vilka users som har access till artikeln.

Så, hur skriver jag en SQL fråga som vill hämta ut en artikel som
- text LIKE "%hej%",
- är av kategori 4 eller 7
- tillhör user 17

Vad jag har provat är

Citat:

SELECT artikel.*
FROM artikel,artikelKategori,artikelUser
WHERE artikel.id=artikelKategori.artikelId AND
artikel.id=artikelUser.artikelId AND
text LIKE "%hej%" AND
(kategoriId = 4 OR kategoriId = 7) AND
user = 17;

Problemet är att om det finns en kategori som uppfyller alla kriterier, som är av både kategori 4 och 7 får jag en dublett av denna...

Hur ska jag göra? Gissar att det blir GROUP eller nån JOIN eller grejs.. de där kurserna jag skolkade från

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2004

Något sånt här skulle du kunna prova:

Citat:

SELECT DISTINCT title,text FROM artikel
LEFT JOIN artikelKategori ON (artikelKategori.artikelId=artikel.id)
LEFT JOIN artikelUser ON (artikelUser.artikelId=artikel.id)
WHERE (kategoriId=4 || kategoriId=7) && userId=17 && text REGEXP '.*hej.*'

Hoppas jag inte helt missförstog din tabellstruktur eller vad du ville åstadkomma.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2003

Tackar NFM! Det fungerade prima!

Är det DISTINCT som säger att det inte ska komma några "dubletter"?

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse.

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jul 2001
Citat:

Ursprungligen inskrivet av HappySatan

Är det DISTINCT som säger att det inte ska komma några "dubletter"?

Stämmer bra det.

WS: AMD Ryzen 7 1700 | 16 GB DDR4 | Geforce GTX 1060 OC 6GB | 480 + 256 + 240 + 240 GB SSD | Win10 x64 Professional + Antergos Linux (Arch-derivat)
Bärbar: Macbook Pro Retina 13" | Intel Core I5 2,4Ghz | 16GB RAM | 256GB Flash
Server: 3x HP Proliant microserver Gen8 | 16 GB DDR3 ECC ram | Sammanlagt 26TB HDD | Esxi

Trädvy Permalänk
Medlem
Plats
Exil i huvudstaden
Registrerad
Jul 2004

Hej!

Bra att det löste sig! En bra startpunkt för liknande frågor (förutom här då så klart) är W3 Schools som har tutorials. Jag är inte heller nån SQL-expert men dyker på det i jobbet titt som tätt och då är denna site bra att kolla upp syntax och exempel:

http://www.w3schools.com/ (klicka på Learn SQL under server scripting. Finns andra topics med där som du kanske ser).

mvh Jens

Crap.