Page 1 of 1

šiektiek pagalbos su sql

Posted: 2015 Apr 06 00:21
by aurimasko
Turiu tokią lentelę:

Code: Select all

 CREATE TABLE IF NOT EXISTS `items` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `player_id` int(9) NOT NULL,  `item_id` int(9) NOT NULL,  `item_amount` int(11) NOT NULL,  PRIMARY KEY (`id`),) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci AUTO_INCREMENT=0 ; 
Ir užklausą:

Code: Select all

INSERT INTO `%s` (`player_id`, `item_id`, `item_amount`) VALUES ('%d', '%d', '%d') ON DUPLICATE KEY UPDATE `item_amount`='%d';
Kaip padaryt, kad jei lentelėje yra įrašas, kurio `player_id` ir `item_id` yra vienodi, tai neįrašytų naujo įrašo, o tik updatintų esamą?

Bandžiau dėti unique indexus ant jų, bet gaunas kad tik pagal `player_id` žiūri, o ne pagal abu:/

Re: šiektiek pagalbos su sql

Posted: 2015 Apr 06 02:43
by aaarnas
Dabar nesugalvoju gero varianto, bet gali padaryti, kad siunti UPDATE tikrindamas norimą sąlygą su WHERE. Jei grąžina, kad affected_rows = 0, tai tada siunti atskirai INSERT.
Galima stored procedūrą padaryti. Gal kas ir geresnį variantą sugalvos. Tikrai tokį atvejį kažkaip kitaip galima išspręsti.

Re: šiektiek pagalbos su sql

Posted: 2015 Apr 06 08:49
by aurimasko
Va, kad norisi apseiti su viena užklausa..
A dar sugalvojau,kad tarkim sukurt dar vieną laukelį ir ten irašyt "player id; item id", uždėt unique ir turėtų veikt, bet velgi - kažkaip atrodo kad galėtų būt geresnis variantas.

-- 2015 Bal 06 09:49 --
aurimasko wrote:Va, kad norisi apseiti su viena užklausa..
Aš dar sugalvojau,kad tarkim sukurt dar vieną laukelį ir ten irašyt "player id; item id", uždėt unique ir turėtų veikt, bet velgi - kažkaip atrodo kad galėtų būt geresnis variantas.