Kirjoittaja Aihe: PHP MySQL tarkastus onko numero olemassa ja jos on...  (Luettu 3349 kertaa)

kojis

  • Käyttäjä
  • Viestejä: 98
    • Profiili
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);
?>


jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #1 : 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?

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #2 : 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 ?
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Jantunen

  • Käyttäjä
  • Viestejä: 254
  • Hö.
    • Profiili
    • Strobotti.com: Valokuvausta ja kameraharrastusta
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #3 : 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

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

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.
Lenovo Thinkpad T420 Intel i5 16Gt/SSD512GB+HDD2TB, Ubuntu 16.04 Xenial Xerus 64bit; Kuvia ja lätinää valokuvauksesta: https://www.strobotti.com/

kojis

  • Käyttäjä
  • Viestejä: 98
    • Profiili
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #4 : 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.

Jantunen

  • Käyttäjä
  • Viestejä: 254
  • Hö.
    • Profiili
    • Strobotti.com: Valokuvausta ja kameraharrastusta
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #5 : 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
Lenovo Thinkpad T420 Intel i5 16Gt/SSD512GB+HDD2TB, Ubuntu 16.04 Xenial Xerus 64bit; Kuvia ja lätinää valokuvauksesta: https://www.strobotti.com/

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #6 : 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.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #7 : 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.

Jantunen

  • Käyttäjä
  • Viestejä: 254
  • Hö.
    • Profiili
    • Strobotti.com: Valokuvausta ja kameraharrastusta
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #8 : 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... ;)
Lenovo Thinkpad T420 Intel i5 16Gt/SSD512GB+HDD2TB, Ubuntu 16.04 Xenial Xerus 64bit; Kuvia ja lätinää valokuvauksesta: https://www.strobotti.com/

odysseus

  • Vieras
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #9 : 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....

odysseus

  • Vieras
Vs: PHP MySQL tarkastus onko numero olemassa ja jos on...
« Vastaus #10 : 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ö?
« Viimeksi muokattu: 30.09.11 - klo:18.41 kirjoittanut odysseus »