[PHP] mysql_fetch_object

Pagina: 1
Acties:
  • 35 views sinds 30-01-2008

  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
Als ik het goed heb begrepen kan ik met fetch object 1 waarde slecteren uit een tabel of colom toch?

Nu heb ik deze code en hij geeft de waarde 2
PHP:
1
2
3
4
5
  $query1 = "SELECT sort FROM kabels WHERE sort < 100 ORDER BY sort DESC LIMIT 1";
  $result1 = mysql_query($query1)or die("Fout in query1: $query1".mysql_error());
  $data1 = mysql_fetch_object($result1);

 $nummer = $data1 + 1;


Wat ik wil is dat hij +1 bij de grootste waar uit TABEL sort pakt. De grootste waarde is 30 dus zou er 31 moete uitkomen. wat doe ik fout want query1 is volgens mijn goed want hij slecteert alle waardes onder de 100 en zet de hoogste waarde boven aan. Ik den kdat het fout gaat met de optelling...

Kan iemand mijn vertellen welke fout ik maak?

[ Voor 9% gewijzigd door eatualive op 20-04-2006 10:28 ]


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:51
Ik weet niet wat je vervolgens met $nummer gaat doen, maar je bent niet het auto-increment-wiel opnieuw aan het uitvinden door $nummer er direct na te gaan gebruiken als PK in een nieuw te inserten regel he? :P
Edit: waarschijnlijk niet trouwens, want dan zit je op gegeven moment met allemaal "unieke" keys van 100 :P

Weet je zeker dat je query goed is? Ik kan (en ga) het niet testen hier, maar wat komt er uit als je die regel aan phpmyadmin (of een soortgelijke tool) voert?

[ Voor 14% gewijzigd door Paul op 20-04-2006 10:31 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 01-02 19:30

webfreakz.nl

el-nul-zet-é-er

Je verhaal is maar vaag. Wat heb je en wat wil je eruit halen?

En als ik het wel goed begrijp doe dan eens:

PHP:
1
2
3
4
$data1 = mysql_fetch_object($result1);
$data1 = mysql_result($data1, 0);

$nummer = $data1 + 1;

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
in de tabel kabels staat een kolom en die heet sort (sorteren) hier komen nummers in te staan zodat ik het goed kan uitsorteren als ik het in een tabel stop.

Nou moet ik dadelijk kabels gaan toevoegen en moeten ze het eerstopvolgende nummer krijgen.
Omdit te doen wil dus de hoogste waarde uit de kolom sorteren pakken en daar 1 bij optellen.

Bij de code $data1 + 1 komt 2 uit dus het lijkt er wel op dat het daar fout zit.

(dit lukt niet met auto increment omdat er dadelijk ook andere typen kabels tussendoor komen die een nummer weer ergens in de 100 gaan krijgen.)

[ Voor 10% gewijzigd door eatualive op 20-04-2006 10:41 ]


  • stimpie79
  • Registratie: Juni 2003
  • Laatst online: 02-02 19:13
offtopic:
waarom een order descending, en niet gewoon:
SELECT max(sort) FROM kabels WHERE sort < 100;

lijkt me iets optimaler, vooral wanneer er veel rijen zijn, nu resulteert dit volgens mij in een tablescan,
terwijl een max(sort) een index kan gebruiken.

  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
stimpie79 schreef op donderdag 20 april 2006 @ 10:40:
offtopic:
waarom een order descending, en niet gewoon:
SELECT max(sort) FROM kabels WHERE sort < 100;

lijkt me iets optimaler, vooral wanneer er veel rijen zijn, nu resulteert dit volgens mij in een tablescan,
terwijl een max(sort) een index kan gebruiken.
Oja dit is veel korten, maar in princiepe werkte die van mijn ook al was hij omslachtig.

  • Paul
  • Registratie: September 2000
  • Laatst online: 18:51
eatualive schreef op donderdag 20 april 2006 @ 10:38:
(dit lukt niet met auto increment omdat er dadelijk ook andere typen kabels tussendoor komen die een nummer weer ergens in de 100 gaan krijgen.)
Dus je gaat bepalen welke type kabel het is door naar het getal in sort te kijken??

Ik zou een autoinc nemen en een veldje kabeltype toevoegen, en vervolgens ORDER BY kabeltype,id ofzo, want nu ben je een race-condition aan het inbouwen (al weet ik niet of het erg is als er dubbelen in de kolom sort staan).

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
Paul Nieuwkamp schreef op donderdag 20 april 2006 @ 10:29:
Ik weet niet wat je vervolgens met $nummer gaat doen, maar je bent niet het auto-increment-wiel opnieuw aan het uitvinden door $nummer er direct na te gaan gebruiken als PK in een nieuw te inserten regel he? :P
Edit: waarschijnlijk niet trouwens, want dan zit je op gegeven moment met allemaal "unieke" keys van 100 :P

Weet je zeker dat je query goed is? Ik kan (en ga) het niet testen hier, maar wat komt er uit als je die regel aan phpmyadmin (of een soortgelijke tool) voert?
Deze werkt.
code:
1
dit werkt perfect de bovenste want ik krijg wel het veld te zien met 30 dus mijn query klopt

[ Voor 22% gewijzigd door eatualive op 20-04-2006 10:56 ]


  • Atari Paul
  • Registratie: November 2002
  • Laatst online: 17:19
Hmmm, eerste fout die ik zie:
maak van $nummer = $data1 + 1; eens $nummer = $data1->sort + 1;

PHP:
1
2
3
4
5
6
7
<?
  $query1 = "SELECT sort FROM kabels WHERE sort < 100 ORDER BY sort DESC LIMIT 1";
  $result1 = mysql_query($query1)or die("Fout in query1: $query1".mysql_error());
  $data1 = mysql_fetch_object($result1);

 $nummer = $data1->sort + 1;
?>

Stability ?? My Atari still has it :)


  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
Atari Paul schreef op donderdag 20 april 2006 @ 10:57:
Hmmm, eerste fout die ik zie:
maak van $nummer = $data1 + 1; eens $nummer = $data1->sort + 1;

PHP:
1
2
3
4
5
6
7
<?
  $query1 = "SELECT sort FROM kabels WHERE sort < 100 ORDER BY sort DESC LIMIT 1";
  $result1 = mysql_query($query1)or die("Fout in query1: $query1".mysql_error());
  $data1 = mysql_fetch_object($result1);

 $nummer = $data1->sort + 1;
?>
Mijn dank is groot hij werkt _/-\o_

  • Atari Paul
  • Registratie: November 2002
  • Laatst online: 17:19
Ps. om de code beter te laten werken zou ik het anders oplossen:

PHP:
1
2
3
4
?
  $query1 = "UPDATE kabels SET order = order + 1 WHERE sort < 100 ORDER BY sort DESC LIMIT 1";
  $result1 = mysql_query($query1)or die("Fout in query1: $query1".mysql_error());
?>


Dit is beter omdat er dan zeker te weten geen update van sort kan gebeuren in de tijd dat je via php de waarde sort ophoogt.

Stability ?? My Atari still has it :)


  • eatualive
  • Registratie: Juni 2005
  • Laatst online: 16:27
Atari Paul schreef op donderdag 20 april 2006 @ 11:03:
Ps. om de code beter te laten werken zou ik het anders oplossen:

PHP:
1
2
3
4
?
  $query1 = "UPDATE kabels SET order = order + 1 WHERE sort < 100 ORDER BY sort DESC LIMIT 1";
  $result1 = mysql_query($query1)or die("Fout in query1: $query1".mysql_error());
?>


Dit is beter omdat er dan zeker te weten geen update van sort kan gebeuren in de tijd dat je via php de waarde sort ophoogt.
kan handig zijn maar aangezien er niet elke dag iets toegevoeg zal worden zal dit denk wel mee vallen. Maar toch bedankt.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:51

Creepy

Tactical Espionage Splatterer

Overigens staat de werking van mysql_fetch_object prima uitgelegd in de documentatie van deze functie op php.net :)
Dit is iets waarvan we stiekum verwachten dat je dit soort problemen/vragen zelf kan oplossen. De documentatie op php.net is vrij uitgebreid en duidelijk met dit soort gevallen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.