mysql: rij tussenvoegen
Ik ben bezig met een navigatiebalk te maken. Nu wil ik de beheerder de nagigatie volgorde laten bepalen.
Nu zit hij bijvoorbeeld al aan zijn 3 de item bezig
1. home
2. over ons
3. contact
Nu wil hij tussen 2. en 3. nog iets plaatsen bijvoorbeeld 'Prijslijst'
Dus dat het zo iets wordt:
1. home
2. over ons
3. prijslijst
4. contact
ik steek dit allemaal in een tabel (via mysql)
Dus nieuw tabel:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `navigation` (
`id` int(11) NOT NULL auto_increment,
`order` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`page` varchar(50) default NOT NULL
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
`id` int(11) NOT NULL auto_increment,
`order` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`page` varchar(50) default NOT NULL
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ik heb de vorige waarden al..
om die erin te steken heb ik de volgende code: (vereenvoudigd)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "INSERT INTO `navigation` (
`id` ,
`order` ,
`name` ,
`link`
) VALUES (
NULL, '$navigation_order', '$navigation', '$link_navigation'
);";
mysql_query($sql) or die (mysql_error());
?>
$sql = "INSERT INTO `navigation` (
`id` ,
`order` ,
`name` ,
`link`
) VALUES (
NULL, '$navigation_order', '$navigation', '$link_navigation'
);";
mysql_query($sql) or die (mysql_error());
?>
hoe kan ik nu tussen 2. en 3. iets steken?
mvg kasper
Je kan ook een 2e SQL query starten om alle id's dynamisch te veranderen.
Geen backtics gebruiken in de queries. Variabelen buiten quotes. Let op real_escape_string.
toby hinloopen schreef op 09.04.2009 17:56:
een 2e kolom aanmaken met daarin "order" met daarin een getal met de volgorde.
Je kan ook een 2e SQL query starten om alle id's dynamisch te veranderen.
Je kan ook een 2e SQL query starten om alle id's dynamisch te veranderen.
die order kolom bestaat al..
en heb je een voorbeeldje?
mvg kasper
Wanneer je een sortorder tussen 2 bestaande waardes wilt hebben, zul je eerst de bestaande records moeten ophogen:
En de insert:
Uiteraard doe je dit binnen een transactie, dus eerst BEGIN en na afloop een COMMIT wanneer alles goed is gegaan. Mocht er wat fout zijn gegaan, een ROLLBACK. Je bent in MySQL verplicht om dan de innoDB-engine te gebruiken, dat is de enige relationele database engine binnen MySQL. Helaas krijg je bij de andere engines geen foutmelding wanneer je een transactie probeert uit te voeren terwijl dat technisch helemaal niet mogelijk is. Tja, MySQL... Sterkte!
Ik zou het zo doen:
1. home
2. over ons
hier komt dan de query om alles op te halen
4. contact
Maar dat moet je dan zelf even doen.