Virhe SQL-lause:
ALTER TABLE `Tauluxx` ADD `Jrjuoksevanro` INT NOT NULL AUTO_INCREMENT MySQL ilmoittaa:
#1075 - Incorrect table definition; There can only be one auto column and it must be defined as a key
Automaattinen juokseva nro pitäisi määritellä avaimeksi,
mutta avaimena on jo id (reknro tai y-tunnus)
Voisko toi juokseva nro olla secondary key?
(ei löydy ainakaan Phpmyadmin valmiista toiminnoista)
kentän alustus onnistuu ehkä php:stä käsin tällä
sql-lauseella jonka sisemmässä osassa käydään selectillä
kaikki taulun rivit läpi
Update taulu Juoksevanro = $laskuri + 1
SELECT * FROM taulu;
http://www.frodos.fi/kurssi/sql/tab_insfromtab.
tosiaan näyttäis siltä että auto_increment määritys käy vain avainkentille
Phpmyadmin:ssa voi kentälle antaa ohjatuilla toiminnoilla seuraavat määritykset:
ensisijainen, indeksi, uniikki
Phpmyadmin ei näyttäis tuntevan käsitettä secondary key
Juoksevan numeron määrittäminen primary key:ksi ei käy,
koska nykyinen avainkenttä rek.nro tai y-tunnus
estää käyttämästä samaa avaintietoa kuin kerran
ja näin pitääkin olla
Tässä tapauksessa täytyy auto incrementti (kuten sen pitäisi aina) tehdä ohjelman koodissa vapaasti valinnaisella tavalla... tai sitten ollain makrolla jos mysql:stä löytyy..en tiiä
Mulla tulee mieleen purkkaratkaisu, joka saattaa olla nopeampi kuin käydä kaikki rivit läpi.
Tee aputaulu, jossa primary keynä on auto_increment, ja toisena kenttänä id (reknro tai y-tunnus).
Sitten vaan lisäät kaikki id:t taulusta aputauluun, ja kun tarvitset aputaulun auto_incrementin kautta käytät sitä yhdistämällä taulut selectillä.
Toivottavasti ymmärsit. (En ole pitkään aikaan mitään tehnyt SQL:llä, joten saat sinne päin olevat koodit, vain jos pyydät).
Tai yritetään, jos vaikka osaisin.
// Aluksi luodaan taulu jotenkin näin (Yritin tavata MySQL opasta en tiedä menikö oikein). CREATE TABLE aputaulu ( nroAuto INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (nroAuto), id2 VARCHAR(12) NOT NULL ); // Sitten laitetaan taulun id:t aputauluun, ja ilmeisesti auto_incrementti huolehtii numeroinnista INSERT INTO aputaulu (id2) SELECT id FROM taulu; // Lopuksi tulostetaan taulujen yhdistelmä SELECT * FROM taulu,aputaulu WHERE taulu.id=aputaulu.id2;
// VAROITUS EN VASTAA KOODINI TOIMIMISESTA, mutta kyllä siitä ideaa saa ottaa
Empäs ota kantaa onko tuollainen turha ylimääräinen taulujen yhditämänen liian hidas, mutta on jokin (purkka)ratkaisu.
kiitoksia ehdotuksesta!
tein tässä vaiheessa erillisen
alustusohjelman (skriptin)
juoksevanro.php
tai oikeammin muokkasin sen
ohjelmasta joka listaa
nimi kentät linkkeinä
juoksevan numeron päivättää lause
on mysql_query funktion syöttötietona
<?php $host="db.dataxx.fi"; $user="xx.info"; $password="xxxxxx"; $database="testikanta"; // otetaan yhteys tietokantaan mysql_pconnect($host,$user,$password) or die("Tietokantayhteys ei toimi, kokeile myöhemmin!"); mysql_select_db($database); // haetaan lista echo "<p>\n"; $kysely = "SELECT Jrid, Jrnimi, Jrjuoksevanro FROM Jarjesto". " ORDER BY Jrnimi"; echo "<p class=ylaotsikko>Valitse järjestö klikkaamalla linkkiä</p>"; if ($tulos = mysql_query($kysely)) { $laskuri = 1; while (list($id, $nimi, $nro) = mysql_fetch_row($tulos)) { // echo "Juokseva nro päivitys! "; mysql_query("UPDATE Jarjesto SET Jrjuoksevanro = $laskuri WHERE Jrid = $id "); $laskuri++; echo "<a href=\"jarjestolista.php?Jrid=$id\" class=leipis target=_blank>$nimi $nro</a><br>\n"; } } else { echo "Listan haku ei onnistunut!"; } echo "</p>\n"; ?>
Mod. edit: Lisäsin kooditagit
Aihe on jo aika vanha, joten et voi enää vastata siihen.