Boolean mező hozzátűzése a queryhez ha egy érték két táblában is szerepel?
Figyelt kérdés
Van két táblám egy SQL adatbázisban, az egyik a felhasználók adatait, a másik a tiltott felhasználók id jét tartalmazza. Azt szeretném, hogy a queryben szereplejen egy boolean, ami megmondja, hogy az adott felhasználó idje szerepel-e a ban táblában.2018. márc. 15. 10:46
1/10 anonim válasza:
És miért nem a felhasználó táblába teszel egy mezőt, hogy tiltott-e a user vagy sem?
2/10 anonim válasza:
Nagyon rosszul gondolkozol. Az egyik legfontosabb aranyszabály egy adatbázis kialakításánál az, hogy a redundancia legyen a minimumon. Eltárolod egy táblában, hogy kik vannak tiltva, majd ezután még a user táblába is külön felveszed, hogy kik vannak tiltva. Ez csak annyit fog jelenteni, hogy ha módosítod az adatokat, akkor két táblán is frissíteni kell az adatokat, mert egynél több helyen tárolod el ugyanazt az információt. Ne. Hacsak nem tárolsz el valami részletes információt az emberek tiltásával kapcsolatban, akkor a fő user táblán legyen egy bool mező, hogy tiltva van-e, vagy sem, és jónapot.
3/10 anonim válasza:
Ha meg eltárolsz további információkat is (mikor lett tiltva, milyen indoklással, stb stb), akkor meg tárold el csak a külön táblában. De mindkettőt egyszerre ne.
4/10 anonim válasza:
Select
Usr.*,
Convert(bit,(Case when ban.usrid is not null then 1 else 0 end))as bannolt
From Usr
Left join Ban on Ban.usrid = Usr.usrid
5/10 A kérdező kommentje:
#1-nek: mert nem egy, hanem egyből két mezőt kell felvennem, ami javarészt üres lesz, mert a tiltás végét, és az indoklást is tárolni akarom.
2018. márc. 17. 08:37
6/10 A kérdező kommentje:
#2-nek a user táblában nem tárolom el még egyszer a tiltást, hanem minden külön a ban táblában van.
2018. márc. 17. 08:38
7/10 A kérdező kommentje:
3#-nak a user csak a felhasználói adatokat tárolja, a ban pedig csak a bannolt felhasználó ID-jét, illetve a tiltás végéig hátralevő időt, és a ban okát tárolja.
2018. márc. 17. 08:39
8/10 A kérdező kommentje:
#4-nek, köszönöm szépen, ezt nem tudtam összerakni a fenéért se, nem vagyok otthon sql-ben még.
2018. márc. 17. 08:40
9/10 A kérdező kommentje:
Végül ezzel meg tudtam mondani ,hogy az adott érték szerepel-e a másik oszlopban:
SELECT `user`.*, (CASE WHEN `ban`.userid IS NOT NULL THEN 1 ELSE 0 END) AS bannolt FROM `user` LEFT JOIN `ban` ON `ban`.`userid` = `user`.`id`
2018. márc. 18. 10:49
10/10 anonim válasza:
Ha a ban-ban szerepel határidő, azt is tedd bele a feltételbe ( remelem nem a tiltás végéig hátralevő idő van benne szó szerint, mert azt mindig updatelni kellene, illetve ebben az esetben nem feltétlen van 1-1 kapcsolat, mert egy user többször is kaphat bannt, szóval outer apply lenne a jó megoldás, de azt lusta vagyok most leírni, megerősítésig)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!