Huidige status
Alleen de array moet uitgelezen kunnen worden key='value', key='value', key='value'
Lang verhaal kort
Ik ben opzoek naar een query die alleen insert als de volledige rij uniek is.
de gegevens worden alsvolgt aangeleverd in me model.
Uitgebreid verhaal
Ik ben bezig met een insert query die alleen moet toevoegen op moment dat een volledige rij niet gelijk is aan een die al bestaat.
De database is als volgt te zien
Bovenstaande wil ik dus voorkomen dat er twee keer een rij voorkomt die 2, allow, 1 bevat.
Het probleem is echter dat ik geen INSERT IGNORE INTO kan gebruiken en tevens geen
ON DUPLICATE KEY UPDATE omdat er geen veld wordt mee gegeven die uniek is los van ID, maar die wordt bij een save functie dus niet meegegeven.
Ik maak gebruik van een framework die de gegevens als volgt aan leverd:
op dit moment is mijn query en gegevens verwerking alsvolgt maar dit kijkt nog niet of de rij uniek is
De enige oplossing die ik op dit moment kan bedenken is om in de model een losse query te plaatsen
die controleerd of die een 1 rij (of meer) tegenkomt en zoja niks uitvoert en zo nee me origenele insert query doet.
Echter weet ik niet hoe ik de array kan omzetten naar
Overige details voor als je wilt helpen tot het einde
Alle drie de velden kunnen leeg zijn. Voorbeeld hiervan is
rol = null, toegang = allow, resource_id = 1. Bij een dergelijk record wordt aan iedereen toegang gegeven tot de index.
Het is dus handig om in de query al rekening te houden met dat het feit dat een volgende velden ook niet uniek zijn
MySQL:
1
2
3
| INSERT INTO acl (rol,toegang,resource_id) SELECT '4','deny',NULL from acl WHERE (SELECT COUNT(id) as total FROM acl WHERE rol='4' AND toegang='deny' AND resource_id IS NULL) = 0 LIMIT 1; |
Alleen de array moet uitgelezen kunnen worden key='value', key='value', key='value'
Lang verhaal kort
Ik ben opzoek naar een query die alleen insert als de volledige rij uniek is.
de gegevens worden alsvolgt aangeleverd in me model.
PHP:
1
2
3
4
5
| $data = array( 'rol' => $value->getRol(), 'toegang' => $value->getToegang(), 'resource_id' => $value->getResource_Id() ); |
Uitgebreid verhaal
Ik ben bezig met een insert query die alleen moet toevoegen op moment dat een volledige rij niet gelijk is aan een die al bestaat.
De database is als volgt te zien
Id | Rol | Toegang | Resource_Id |
1 | 2(admin) | allow | 1(index) |
2 | 2(admin) | allow | 1(index) |
Bovenstaande wil ik dus voorkomen dat er twee keer een rij voorkomt die 2, allow, 1 bevat.
Het probleem is echter dat ik geen INSERT IGNORE INTO kan gebruiken en tevens geen
ON DUPLICATE KEY UPDATE omdat er geen veld wordt mee gegeven die uniek is los van ID, maar die wordt bij een save functie dus niet meegegeven.
Ik maak gebruik van een framework die de gegevens als volgt aan leverd:
PHP:
1
2
3
4
5
| $data = array( 'rol' => $value->getRol(), 'toegang' => $value->getToegang(), 'resource_id' => $value->getResource_Id() ); |
op dit moment is mijn query en gegevens verwerking alsvolgt maar dit kijkt nog niet of de rij uniek is
PHP:
1
2
3
4
5
6
7
8
9
10
11
| $keys = array_keys($data); $values = array_values($data); $keys = implode(",", $keys); $values = implode("','", $values); $select = $this->getDbTable()->getAdapter()->query('INSERT INTO acl ('. $keys . ') VALUES (\'' . $values . '\') '); return $select; |
De enige oplossing die ik op dit moment kan bedenken is om in de model een losse query te plaatsen
die controleerd of die een 1 rij (of meer) tegenkomt en zoja niks uitvoert en zo nee me origenele insert query doet.
Echter weet ik niet hoe ik de array kan omzetten naar
MySQL:
1
| WHERE rol = '2' AND toegang='allow' AND resource_id = NULL |
Overige details voor als je wilt helpen tot het einde
Alle drie de velden kunnen leeg zijn. Voorbeeld hiervan is
rol = null, toegang = allow, resource_id = 1. Bij een dergelijk record wordt aan iedereen toegang gegeven tot de index.
Het is dus handig om in de query al rekening te houden met dat het feit dat een volgende velden ook niet uniek zijn
Id | Rol | Toegang | Resource_Id |
1 | 2(admin) | allow | 1(index) |
2 | allow | 1(index) |
[ Voor 5% gewijzigd door IMarks op 20-11-2012 16:55 ]