Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: kojis - 25.09.11 - klo:23.09

Otsikko: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: kojis - 25.09.11 - klo:23.09
Osaisko joku neuvoa kun pitäisi testata php:llä mysql kannasta numeroa onko se jo käytössä ja jos on niin lisätä numeroon yksi ja palauttaa se.

Tällasella functiolla olen koittanut mutta ei ala toimimaan. $sql muuttuja kuvastaa kannasta haettua:
Koodia: [Valitse]
<?php
function testi($testattava) {
// $sql = select numero from....
$sql 123;
if ($sql == $testattava) {
$uusi $testattava 1;
$tarkasta_uudestaan testi($uusi);
}
else {
return $testattava;
}
}

echo 
testi(123);
?>

Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: jekku - 26.09.11 - klo:06.31
Osaisko joku neuvoa kun pitäisi testata php:llä mysql kannasta numeroa onko se jo käytössä ja jos on niin lisätä numeroon yksi ja palauttaa se.

Tällasella functiolla olen koittanut mutta ei ala toimimaan. $sql muuttuja kuvastaa kannasta haettua:
Koodia: [Valitse]
<?php
function testi($testattava) {
// $sql = select numero from....
$sql 123;
if ($sql == $testattava) {
$uusi $testattava 1;
$tarkasta_uudestaan testi($uusi);
}
else {
return $testattava;
}
}

echo 
testi(123);
?>


Minulle ainakin jäi epäselväksi mitä olet oikeasti hakemassa?

Jos taulussasi on numeroita 1, 2, 3, 6, 7, 8 ja testaat numeroa 6.
Se on, joten saat palautteeksi seiskan - onko oikein ja toivottua?
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: ajaaskel - 26.09.11 - klo:08.56
Ihmettelen samaa kuin "jekku" mutta arvaan että yrität pitää kirjaa juoksevista numeroista (esim. laskun numero) ---   vai mikä oli ajatus ?
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: Jantunen - 26.09.11 - klo:09.09
Ihmettelen samaa kuin "jekku" mutta arvaan että yrität pitää kirjaa juoksevista numeroista (esim. laskun numero) ---   vai mikä oli ajatus ?

Eli lisätäkseni edelliseen kertojaan, tämä lienee se, mitä haluat:

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html (http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html)

ja PHP:lla tuon saa pyydettyä käyttäen tuota funktiota:

http://fi2.php.net/manual/en/function.mysql-insert-id.php (http://fi2.php.net/manual/en/function.mysql-insert-id.php)

Luonnollisesti, mikäli kyseessä on juuri laskun numero, missä tapauksessa numeroinnin on pakko olla jatkuva, joudut tietenkin itse tekemään hieman logiikkaa tuonne, koska auto_increment-tieto on muistaakseni tallennettu "taulun ominaisuudeksi" jolloin esim viimeisimmän luodun tietueen poistaminen ei pienennä tuota numeroa.
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: kojis - 26.09.11 - klo:10.44
Kyseessä ei ole auto incerement eikä tarvitse olla jatkuva numerosarja. Vaan kannasta tarkastus löytyykö sieltä esim. 123 numerosarjaa jos löytyy kasvatetaan sitä yhdellä ja tarkastetaan uudestaan löytyykö sitä numerosarjaa.

Eli ,jos löytyy, kasvatetaan yhdellä ja tarkastetaan uudestaan. Lopuksi palautetaan numerosarja mitä ei ole kannassa.
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: Jantunen - 26.09.11 - klo:12.05
Kyseessä ei ole auto incerement eikä tarvitse olla jatkuva numerosarja. Vaan kannasta tarkastus löytyykö sieltä esim. 123 numerosarjaa jos löytyy kasvatetaan sitä yhdellä ja tarkastetaan uudestaan löytyykö sitä numerosarjaa.

Eli ,jos löytyy, kasvatetaan yhdellä ja tarkastetaan uudestaan. Lopuksi palautetaan numerosarja mitä ei ole kannassa.

Et koskaan palauta tuota tarkastuksen tulosta tuolta ensimmäisestä haarasta, eli siis kun kutsut testi()-funktiota itseään ja palaat sieltä, palaat toki vain "yhden pykälän takaisin päin" etkä suinkaan alkuperäisen kutsun kohdalle. Tulipas hankalasti selitettyä :D
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: retu - 26.09.11 - klo:12.16
Eikö olisi helpointa laittaa se kysely näin?
Koodia: [Valitse]
select max(numero) from...Sitten vaan ynnää löytyneeseen numeroon 1.
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: jekku - 26.09.11 - klo:16.33
Eikö olisi helpointa laittaa se kysely näin?
Koodia: [Valitse]
select max(numero) from...Sitten vaan ynnää löytyneeseen numeroon 1.

Ja jos oikein on laiska niin nappaa sen suoraan:
Koodia: [Valitse]
select max(numero)+1 uusi from...
No, kai se siitä selviää mikä se peremmäinen idea ja tarve on.
Ihan aina ei ole helppo päättää tekeekö jonkun homman php:lla vai antaako kantamoottorin tehdä koko duuni.
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: Jantunen - 26.09.11 - klo:16.51
Ja jos oikein on laiska niin nappaa sen suoraan:
Koodia: [Valitse]
select max(numero)+1 uusi from...
No, kai se siitä selviää mikä se peremmäinen idea ja tarve on.
Ihan aina ei ole helppo päättää tekeekö jonkun homman php:lla vai antaako kantamoottorin tehdä koko duuni.

...varsinkaan, kun varsinaista tarvetta ei ole määritelty, eli mikään konsti tuolla php:n puolellahan ei tee tuosta pyydetystä toimenpiteestä kovin varmatoimista pidemmän päälle. Esimerkiksi rinnakkaisuuttahan tuo ei tue, eli kaksi samanaikaista käyttäjää/operaatiota voisi hyvinkin saada saman id:n, jolloin homma kolisee kiville välittömästi. Ainoat keinot selvitä siitä, olisi tehdä operaatiosta "atominen" käyttämällä insertissä alikyselyä tuon id:n asettamisessa tai sitten juurikin hyödyntämällä auto_increment-määrettä. Mutta mistään tietueiden lisäämisestä ei "tehtävänannossa" edes puhuttu missään kohtaa... ;)
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: odysseus - 30.09.11 - klo:18.32
Miksi MySQL:n AUTO_INCREMENT ei kelpaa?

syy? Onko useampia kenttiä?

Kelpaako:

INSERT INTO xxx (aaa) VALUES ( (SELECT MAX(zzz) + 1 FROM yyy))

???

Edit: Tosin halusit palautusarvon, mutta oletan, että haluat siis tallentaa seuraavan recordin yhtä suuremmalla....
Otsikko: Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
Kirjoitti: odysseus - 30.09.11 - klo:18.39
Kyseessä ei ole auto incerement eikä tarvitse olla jatkuva numerosarja. Vaan kannasta tarkastus löytyykö sieltä esim. 123 numerosarjaa jos löytyy kasvatetaan sitä yhdellä ja tarkastetaan uudestaan löytyykö sitä numerosarjaa.

Eli ,jos löytyy, kasvatetaan yhdellä ja tarkastetaan uudestaan. Lopuksi palautetaan numerosarja mitä ei ole kannassa.

Haa, nyt vasta äkkäsin tämän.

No, miksipä et hakisi koko hoitoa kannan numeroista taulukkoon ja sitten populoi toisen taulukon väliltä 0-mysql_num_rows

http://php.net/manual/en/function.mysql-num-rows.php

..ja sitten:

http://php.net/manual/en/function.array-diff.php

tai tarpeesta riippuen

http://php.net/manual/en/function.array-intersect.php

Käykö?