Hur formulera SQL-sats? Relationstabell..

Permalänk
Medlem

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

Visa signatur

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse. Har en förkärlek för tysk tjejpop.

Permalänk
Medlem

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.

Permalänk
Medlem

Tackar NFM! Det fungerade prima!

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

Visa signatur

Modermodem från ONOFF och bildskärmsutrustning från Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse. Har en förkärlek för tysk tjejpop.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av HappySatan

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

Stämmer bra det.

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Medlem

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

Visa signatur

Crap.