Avatar billede doomstone-dk- Nybegynder
10. september 2005 - 19:14 Der er 7 kommentarer og
1 løsning

2 tabeller, tag ikke med hvis den har kolonne

Ja det er lidt svært at forklare hvis man ikke kende min database :) så her viser jeg den.
(ITEMS) - type er hvilken type itemet er, det er id på en kolonne i en anden tabel
id      int(10)
name      varchar(255)
wowid      varchar(65)
type      int(10)
slot      varchar(65
minimum_level      int(10)

(item_stat_rc) - Denne database indeholde hvilken rase og class de r kan have itemet på. (Et item kan kodt passe til flere raser og derfor kan der godt være kolonner)

id      int(10)
item      int(10) <- It "id" på itemet fra tabellen 'item'
stat      int(10) <- enten "race" eller "class"
modifier      varchar(65)


ok så :D
Jeg går ud fra at i har forstået 'item' tabellen.. og vil lige give jer eksempel på hvordan 'item_stat_rc' ser ud.

2338      81239      13      race      Tauren <- Kun rasen "Tauren" kan have dette item på
2339     81366     12     class     Priest <- Kun klassen "Priest" kan have dette item på
2340     81497     12     class     Priest
2341     81580     12     class     Priest

Godt så :D

Der er også items som alle kan have på.
Hvis det er sådan et items, så har den ikke nogen "class" colonne i 'item_stat_rc' (DOG: kan den godt have en "rase" kolonne)

Så nu skal jeg lave en SELECT som f.eks. henter items som har typen(type fra 'item') 5 og 1 og så skal det være items som kan bruges af en 'Mage' og af 'alle' og slot skal være "Head"

Jeg har prøvet at lave SELECT selv..
SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM `item` p1, `item_stat_rc` p2
WHERE p1.slot  = 'Head'
AND p1.type = '5'
AND  p1.id = p2.item
AND p2.type = 'class' AND p2.modifier = 'Mage'
OR p1.slot  = 'Head'
AND p1.type = '1'
AND  p1.id = p2.item
AND p2.type = 'class' AND p2.modifier = 'Mage'

Denne tage dog kun de items som er af type 5,1 og er af slot "Head"...

Så :) hvordan kan jeg gøre sådan at den også tage dem med som ikke er sat til nogen bestem class?


Tak for hjælpen
Kasper Rune Søgaard
Avatar billede beef12 Nybegynder
10. september 2005 - 19:21 #1
Jeg må erkende at jeg havde lidt svært ved at forstå spørgsmålet.
Men sådan som jeg forstår problemstillingen, så mangler du de rækker hvor der ingen class er:
Prøv med denne sql:
SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM item p1
left outer join item_stat_rc p2
on  p1.id = p2.item
WHERE p1.slot  = 'Head'
AND p1.type = '5'
AND p2.type = 'class'
AND (p2.modifier = 'Mage'
OR p1.slot  = 'Head')
AND p1.type = '1'
AND  p1.id = p2.item
AND p2.type = 'class'
AND p2.modifier = 'Mage'

Hvis jeg er helt gal på den, så prøv at kort og forklare præcist hvad problemet er.
Avatar billede beef12 Nybegynder
10. september 2005 - 19:26 #2
Hov der er noget galt:
Hvordan skal din AND/OR fungere?
(udtryk og udtryk og udtryk) eller (udtryk og udtryk og udtryk) ??

SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM item p1
left outer join item_stat_rc p2
(on  p1.id = p2.item
and p1.slot  = 'Head'
AND p1.type = '5'
AND p2.type = 'class'
AND p2.modifier = 'Mage')
OR (p1.slot  = 'Head'
AND p1.type = '1'
AND  p1.id = p2.item
AND p2.type = 'class'
AND p2.modifier = 'Mage')
Avatar billede doomstone-dk- Nybegynder
10. september 2005 - 20:14 #3
Altser jeg er ikke 100 på hvad du mener med min AND/OR..
Den det er ikke 100% sådan den skal se ud.. jeg lavede den bare sådan fordi det var det eneste min basic viden i MySQL kunne finde ud af..

Men som sagt der der 3 ting der skal vælge ud fra..
1. Dem som har p1.type = 5 eller 1
2. p1.slot skal være 'Head'
3. Den skal tage de items som kan side på en Mage og dem som kan side på ALLE

Grunden til at jeg gerne fil finde en ande må er for at slippe for noget som kommer til at ligne dette.

SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM `item` p1, `item_stat_rc` p2
WHERE p1.slot  = 'Head'
AND p1.type = '5'
AND  p1.id = p2.item
AND p2.type = 'class' AND p2.modifier NOT 'Druid'
AND p2.type = 'class' AND p2.modifier NOT 'Hunter'
AND p2.type = 'class' AND p2.modifier NOT 'Paladin'
AND p2.type = 'class' AND p2.modifier NOT 'Priest'
AND p2.type = 'class' AND p2.modifier NOT 'Rogue'
AND p2.type = 'class' AND p2.modifier NOT 'Shaman'
AND p2.type = 'class' AND p2.modifier NOT 'Warlock'
AND p2.type = 'class' AND p2.modifier NOT 'Warrior'

OR p1.slot  = 'Head'
AND p1.type = '1'
AND  p1.id = p2.item
AND p2.type = 'class' AND p2.modifier NOT 'Druid'
AND p2.type = 'class' AND p2.modifier NOT 'Hunter'
AND p2.type = 'class' AND p2.modifier NOT 'Paladin'
AND p2.type = 'class' AND p2.modifier NOT 'Priest'
AND p2.type = 'class' AND p2.modifier NOT 'Rogue'
AND p2.type = 'class' AND p2.modifier NOT 'Shaman'
AND p2.type = 'class' AND p2.modifier NOT 'Warlock'
AND p2.type = 'class' AND p2.modifier NOT 'Warrior'
Avatar billede doomstone-dk- Nybegynder
10. september 2005 - 20:26 #4
DOH ->
SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM `item` p1, `item_stat_rc` p2
WHERE p1.slot = 'Head'
AND p1.type = '5'
AND p1.id = p2.item
AND p2.modifier != 'Druid'
AND p2.modifier != 'Hunter'
AND p2.modifier != 'Paladin'
AND p2.modifier != 'Priest'
AND p2.modifier != 'Rogue'
AND p2.modifier != 'Shaman'
AND p2.modifier != 'Warlock'
AND p2.modifier != 'Warrior'
OR p1.slot = 'Head'
AND p1.type = '1'
AND p1.id = p2.item
AND p2.modifier != 'Druid'
AND p2.modifier != 'Hunter'
AND p2.modifier != 'Paladin'
AND p2.modifier != 'Priest'
AND p2.modifier != 'Rogue'
AND p2.modifier != 'Shaman'
AND p2.modifier != 'Warlock'
AND p2.modifier != 'Warrior'

Denne virker do heller ikke
Avatar billede beef12 Nybegynder
10. september 2005 - 20:41 #5
nårh... så er det ikke så svært:

SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM `item` p1, `item_stat_rc` p2
WHERE p1.slot  = 'Head'
AND p1.type in ('5','1') -- er disse ikke ints, i så fald fjern ''
AND  p1.id = p2.item
AND p2.type = 'class' AND p2.modifier IN ('Mage','Alle')

Ved ikke hvad du mener med alle... er det bare en modifier?, ellers skal du fjerne 'alle' fra den sidste linie
Avatar billede doomstone-dk- Nybegynder
10. september 2005 - 20:52 #6
Problemet er at hvis itemet ikke er kun kan bruges af en klasse så har den ikke nogen tabel i `item_stat_rc`..
Men jeg tror bare at jeg lave et script som så skrive 'all' istedet for ikke at lave nogen kolonne.
Avatar billede doomstone-dk- Nybegynder
10. september 2005 - 20:58 #7
Men SELECT p1.id, p1.name, p1.type, p1.minimum_level
FROM `item` p1, `item_stat_rc` p2
WHERE p1.slot  = 'Head'
AND p1.type in ('5','1') -- er disse ikke ints, i så fald fjern ''
AND  p1.id = p2.item
AND p2.type = 'class' AND p2.modifier IN ('Mage','Alle')

Har hjulpet mig til hvordan jeg kan gøre det meget smarter :) så du må godt skrive noget som et svar så jeg kan give dig nogle point
Avatar billede beef12 Nybegynder
10. september 2005 - 21:15 #8
ok... held og lykke med det
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester