Autor Zpráva
tark
Profil
Při vkládání dotazu používám tuto konstrukci:

INSERT INTO table (title,parent,order) VALUES ('Nejaky titulek',nejake cislo,(SELECT max(order) FROM table WHERE parent=$nejake_cislo + 1))


Můj problém spočívá v tom, že když v databázi není žádný záznam, tak max(order¨) je null a v tom spočívá můj problém... Null + 1 = null a já bych potřeboval, aby to hodilo třeba nulu či jedničku... Dá se to vyřešit? Dělám stromová menu a potřebuju, aby hodnoty ve sloupci order NEBYLY stejné. Nicméně není to tak jednoduché, více na tomhle - snad to pochopíte:


1. Úvodní stránka (id=1, parent=0, order=1)
2. O firmě (id=2, parent=0, order=2)
3. Produkty (id=3, parent=0, order=3)
1. Produkt 1 (id=5, parent=3, order=1)
2. Produkt 2 (id=6, parent=3, order=2)
4. Kontakty (id=4, parent=0, order=4)



Víte teda někdo jak na to? Předem díky... Udělat to dvěma SQL dotazy s mezistupněm v PHP (naznačím) se mi nechce... Co kdyby někdo přidal stránku mezi těma dvěma SQL dotazy? Problém... :-/


$value = pgdb::value('SELECT max(order) FROM table WHERE parent=$nejakecislo'); // vlastni fce, vytahne primo hodnotu, tim se nezabyvejte ;-)
if(!$value)
$value=1;

// dalsi sql dotaz, uz primo na vlozeni...
Kajman_
Profil *
SELECT nvl(max(order),0)+1 FROM table WHERE parent=$nejake_cislo
tark
Profil
Diky, zkusim!
tark
Profil
ERROR: function nvl(integer, integer) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts...

fnuk :( ale i tak diky za snahu
Kajman_
Profil *
Hmm, no já pgsql moc neznám nvl je oracle, ifnull je v mysql nevěděl jsem, že tady se to jmenuje coalesce :-)
tark
Profil
DĚKUJUUUUU :-) Funguje to! Já zkoušel konstrukce typu IF select ... IS NULL = 0 a nešlo... ještě jednou dík :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0