10. september 2005 - 19:14Der 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?
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.
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')
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'
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'
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
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.
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
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.