Gå til innhold

Finne største tall i kolonne


Anbefalte innlegg

Er relativt fersk på PHP, men har satt opp et lite metric system for spill.

Det jeg nå sliter med, er at hver spiller får en unik ID fra serveren min hver gang de installerer appen.

 

Jeg vil gjøre noe slik:

if ( $_GET["idnumber"] )

{

$newid = mysqli_query($con,"SELECT MAX(PhoneID) FROM $tname");

die( $newid );

};

 

Men jeg får ingen respons når jeg trigger dette i web-browser..

Hva gjør jeg galt?

 

Lurer også på hvor godt php og mysql fungerer i lag?

La oss si at jeg har 10 brukere som prøver å gjøre dette 'helt samtidig'.

Vil php klare å skille mellom dem og gi ut unike tall til hver bruker?

 

edit: legger ved toppen av scriptet slik at det er lettere å se hva jeg driver med

<?php
// Get Configuation file
require("config.php");
// Connect to server
$db = mysql_connect($host, $user, $pass) or die ( mysql_error() );
mysql_select_db($dbname) or die ( mysql_error() );

// Check for the existing table if its not found create it
if ( ! mysql_num_rows( mysql_query("SHOW TABLES LIKE '" . $tname . "'") ) )
{
$query = "CREATE TABLE `$tname` (
	`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	`PhoneID` VARCHAR(255) NOT NULL,
	`Pack` VARCHAR(255) NOT NULL,
 `Level` VARCHAR(255) NOT NULL,
	`Stars` VARCHAR(255) NOT NULL,
	`Time` INT(255) NOT NULL,
	`Score` INT(255) NOT NULL,
	`Date` VARCHAR(255) NOT NULL )";
$create_table = mysql_query($query) or die ( mysql_error() );
}
// Check for a universla DeviceID
if ( $_GET["newid"] )
{
$result = mysqli_query($db,"SELECT * FROM `$tname`");
//$bigID = mysqli_query($bigID,"SELECT MAX(PhoneID) FROM $tname");
// = SELECT MAX(PhoneID) AS HighestPrice FROM Products;
echo ($result);
die ($result);
};
// Check server status from application
if ( $_GET["status"] ) die('online');

Endret av HadHa
Lenke til kommentar
Videoannonse
Annonse

Hva er det du prøver å skrive ut med de echo-linjene dine nederst? mysqli_result() returnerer ikke en streng, og derfor er det ikke bare å skrive ut resultatet.

Takk for svar.

Planen var å lagre det største tallet den fant i kolonnen "PhoneID", i $result.

Deretter vil jeg echoe/die result. Appen min får da dette tallet tilbake og vet at det tallet +1 er et unikt tall.

Lenke til kommentar

Prøv noe sånt:

 

$sql="SELECT MAX(PhoneID) AS max_phone_id FROM $tname";
$result=mysql_query($sql) or die(mysql_error());
$max_phone_id=mysql_result($result,0,max_phone_id) or die(mysql_error());
echo "max_phone_id=$max_phone_id";

 

Koden er utestet. Du bør også oppgradere mysql-funksjonene til de tilsvarende mysqli-funksjoner, eller aller helst PDO-funksjoner.

Endret av MikkelRev
Lenke til kommentar

Takk - det funker, jeg forstår nå at jeg tenkte litt bakvendt.

Om du har noen minutter ekstra, hva mener du med følgende settning:

 

Koden er utestet. Du bør også oppgradere mysql-funksjonene til de tilsvarende mysqli-funksjoner, eller aller helst PDO-funksjoner.

Lenke til kommentar

mysql-funksjonssettet er gamle og utgående funksjoner og anbefales ikke lenger.

Hold deg unna disse funksjonene: http://no1.php.net/manual/en/ref.mysql.php

 

This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:

 

mysql-funksjoner er står for mysql improved, og er et bedre valg. Det gjelder disse funksjonene: http://no1.php.net/manual/en/book.mysqli.php

 

PDO er det foretrukkne alternativet, og det kan du lese mer om her: http://no1.php.net/manual/en/ref.pdo-mysql.php

Lenke til kommentar

Morro - skal lese meg opp på den biten.

Er det også noen som kan si noe om delspørsmålet mitt?

 

Inni samme funksjonen her kommer jeg til å gjøre noe slik

 

Ved førstegangsinstallasjon av appen min ber den serveren om en ID.

Serveren svarer med dette:

$sql="SELECT MAX(PhoneID) AS max_phone_id FROM $tname";
$result=mysql_query($sql) or die(mysql_error());
$max_phone_id=mysql_result($result,0,max_phone_id) or die(mysql_error());
- Lager et nytt tall i tabellen - med PhoneID verdien: $max_phone_id+1-
die ("max_phone_id=$max_phone_id"

 

Appen setter sin ID til å være verdien den fikk tilbake.

 

Ved en 'eventuelt stor pågang', som 10-20 stker prøver å gjøre dette samtidig, vil det fungere som jeg har tenkt? Eller kommer jeg her til å dele ut duplikater av samme ID.

Lenke til kommentar

Dette avhenger av hvordan du legger inn et nytt tall i tabellen.

 

Du må lese ut nåværende phone-id med en select og legge inn ny med update eller insert i samme transaksjon. Da vil MySQL holde styr på dette for deg. Legg også en unik indeks på phone-id-kolonnen, da får du både sikret at eventuelle feil fanges opp og dessuten at max-funksjonen ikke krever en full tablescan.

 

Alternativt kan du låse tabellen med LOCK_TABLES

 

Les mere om dette her

 

http://dev.mysql.com...ansactions.html

 

Et bedre alternativ enn max-funksjonen til dette bruket er å ha en id-kolonne definert med auto-increment, den vil da automatisk oppdateres med +1 for hver rad du legger inn.

 

http://php.net/manua...astinsertid.php

 

Merk det Nour skriver om mysql, du må lese ut verdien i samme transaksjon, altså før commit()-setningen.

 

Mer generell info - les om ACID-prinsippet her http://no.wikipedia.org/wiki/Database

Endret av quantum
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...