mysql: rij tussenvoegen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kasper Heyndrickx

Kasper Heyndrickx

09/04/2009 17:53:00
Quote Anchor link
Hallo

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)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;


ik heb de vorige waarden al..
om die erin te steken heb ik de volgende code: (vereenvoudigd)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
?>


hoe kan ik nu tussen 2. en 3. iets steken?

mvg kasper
 
PHP hulp

PHP hulp

23/11/2024 14:33:35
 
Toby hinloopen

toby hinloopen

09/04/2009 17:56:00
Quote Anchor link
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.
 
Dennis Mertens

Dennis Mertens

09/04/2009 17:59:00
Quote Anchor link
Geen backtics gebruiken in de queries. Variabelen buiten quotes. Let op real_escape_string.
 
Kasper Heyndrickx

Kasper Heyndrickx

09/04/2009 17:59:00
Quote Anchor link
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.

die order kolom bestaat al..
en heb je een voorbeeldje?

mvg kasper
 
Frank -

Frank -

09/04/2009 18:01:00
Quote Anchor link
order.... Verzin daar maar even heel snel een betere naam voor, order is een gereserveerd woord. Gelukkig zit je in jouw database te schijten en gooi je backticks ` in je queries, zolang je deze vaud maakt, gaat het "goed"... Een betere naam en je loopt nooit het risico dat er iets fout gaat. Backticks zijn voor sukkels, die ga je dus niet (meer) gebruiken.

Wanneer je een sortorder tussen 2 bestaande waardes wilt hebben, zul je eerst de bestaande records moeten ophogen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
UPDATE
  tabelnaam
SET
  sortorder = sortorder + 1
WHERE
  sortorder > 2;

En de insert:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
INSERT INTO
  tabelnaam(
    koloma, sortorder
  )
VALUES (
  'waarde', 3
);

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!
 
Roel -

Roel -

09/04/2009 18:38:00
Quote Anchor link
Ik denk dat je 3 standaard pagina's niet dynamisch zijn en dus een standaard pagina is waar niets uit de database gehaald wordt.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.