Volledige versie bekijken : MySQL



Fck_
1 May 2010, 14:37
Hallo,

Ik weet niet goed waar ik dit topic moest zetten, bij Linux of bij Webdevelopment fzo :p , daarom zet ik hem hier !

Dit is het verhaal:
Ik heb met behulp van 'Gnokii' (www.gnokii.org) er voor gezorgd dat mijn sms'en automatisch ingelezen worden. Al deze sms'en worden dan in een MySQL database gezet. Nu wil ik de tekst gaat 'ontleden' ofzo.

Het moet dus een votingsysteem worden. Als er een 1 in de sms staat, heeft speler 1 dus 1 stem meer. Staat er 2, dan krijgt speler 2 een stem meer.. Jullie snappen het principe wel.

Mijn vraag dus:
Hoe kan ik gegevens uit een veld halen, ze 'analyseren' en aan de hand van deze waarde ergens optellen fzo?

Alvast bedankt!!

rommeke
1 May 2010, 22:51
heb je enige kennis van php en mysql anders kan je een php pagina aanmaken die gebruikt van een select query en
met if(mysql_num_rows($result) > 0) het opslaan het weergeven in een tabel. Samen met lamp kan je dan die pagina lokaal bekijken :D

Ik heb nu wat weinig voor heel de code te schrijven (tis al behoorlijk laat aan het worden) maar indien je er niet aan uit graakt wil ik wel eens kijken op ik de opmaak kan verzorgen van de mysql aanroepen in php

rommeke
2 May 2010, 08:40
sorry voor de dubbelpost maar ik kan blijkbaar niet meer editen als je geen sql kent raad ik je aan om een de tuts van alister christie tebekijken op codegearguru.com alsook eens kijken voor een grafische weergave van je database ik weet niet of SQLYOG draait op linux. Daarnaast heb ik nog eens nagedacht je zou het kunnen doen in php maar met puur sql en een grafische interface zou het ook kunnen lukken alhoewel dan een klein overzicht van de verschillende tabbelen handig zou kunnen zijn.

Bv tabel a (veld1, veld 2) met primary en forgein keys er gelieve bij indien er een joint of een subquery zal moet gemaakt worden :D

ultddave
2 May 2010, 13:04
Ik denk dat deze PHP code voldoende is;



<?php
$host="localhost";
$login="root";
$pass="";
$database ="sms";
$db = mysql_connect($host,$login,$pass);
if (!mysql_select_db($database,$db)) {
echo "Connectie met database mislukt ";
}
else
{
$totaalAantal1 = 0;
$totaalAantal2 = 0;
$totaalAantalF = 0;
$result = mysql_query("SELECT inhoud FROM `berichten`");
while($row = mysql_fetch_array($result)){
extract($row);
if(strcmp($inhoud,"1")==0)
$totaalAantal1 += 1;
else if(strcmp($inhoud,"2")==0)
$totaalAantal2 += 1;
else
$totaalAantalF += 1;
}

echo "Er zijn ".$totaalAantal1." mensen die 1 hebben gesmsed.<br/>";
echo "Er zijn ".$totaalAantal2." mensen die 2 hebben gesmsed.<br/>";
echo "Er zijn ".$totaalAantalF." mensen die iets anders hebben gesmsed.<br/>";
}

?>


Een normale SELECT query zal voldoende moeten zijn, in de veronderstelling dat de er een kolom is die de inhoud van het bericht bevat. ;)

Waarbij deze informatie ingevuld moet worden;
$host="localhost";
$login="root";
$pass="";
$database ="sms";

Met de juiste login informatie voor je database.

En ook deze;
mysql_query("SELECT inhoud FROM `berichten`");

Daar moet je "inhoud" vervangen door de juiste kolomnaam. En "berichten" door de juiste tabelnaam.

De score van "speler 1" wordt bijgehouden in $totaalAantal1 en die van speler 2 in $totaalAantal2. $totaalAantalF bevat het aantal foute smsen. (Die dus niet bestaan uit "1" of "2".)

PS: Het kan simpeler als je de inhoud van de sms bijhoudt als een integer ipv een string. Maar dan kunnen er wel geen smsen die tekst bevatten, in de database gestopt worden. Dus dan moet je inkomende berichten 'parsen' alvorens ze in de database te stoppen.

Mvg,
Dave

rommeke
2 May 2010, 19:01
leuk gedaan maar ik prefereer toch heb gebruik van or die bij ipv van je connectie
btw je doet ook geen controle of je query kan uitgevoerd worden. Daarnaast sluit je database connectie ook niet af. Maar wat is strcmp is dat een string in een in stukjes kappen. Als je wilt ga ik eens met die code brielen :D

carl
2 May 2010, 19:49
Als je een tabel "sms" hebt met velden id (autonumber) en tekst(varchar fzo)

kan je gewoon volgende SQL query uitvoeren:
SELECT COUNT(tekst) FROM sms HAVING tekst = '1';

En dan hetzelfde doen voor 2 ;) Of mis ik iets ?

ultddave
2 May 2010, 20:04
btw je doet ook geen controle of je query kan uitgevoerd worden.
Hoezo? De if else test rond de databaseconnectie zorgt ervoor dat de query enkel uitgevoerd wordt als er een DB connectie is. ;)
Als de query zelf zou mislukken (om 1 of andere reden), bevat $result gewoon een lege result set. Dus dan zou de while lus gewoon overgeslagen worden omdat $result geen rijen heeft voor te 'fetchen'. Want ook de bedoeling is. ;)

En omdat ik de 3 variabelen geinitialiseerd heb op 0, zal er geen error voorkomen bij het uitvoeren van die 3 echo statements. ;)


Daarnaast sluit je database connectie ook niet af.
Database connectie sluit automatisch op het einde van het script. ;)


Maar wat is strcmp is dat een string in een in stukjes kappen.

strcmp = String Compare. Een PHP functie voor strings te vergelijken. Die returned "0" als ze gelijk zijn. Opzich hetzelfde als je if($inhoud == "1") zou doen dus. ;) Maar ik ben gewend om met strcmp te werken. ;)


En dan hetzelfde doen voor 2 Of mis ik iets ?
Opzich zou dat gaan ja. Dat is korter alleszins :D. Had ik over het hoofd gezien. :D

Mvg,
Dave

ultddave
2 May 2010, 20:54
EDIT: Maar het is inderdaad beter om de DB connectie zelf te sluiten. ;)

mysql_close($db);

Moet je dan achteraan toevoegen. ;)

Mvg,
Dave

Martijnc
2 May 2010, 21:27
Het is aangeraden om over te stappen op MySQLi of PDO, de oude MySQL extension wordt niet meer actief ontwikkeld. Er zijn voor en nadelen een beide, PHP legt hier (http://ca3.php.net/manual/en/mysqli.overview.php) de verschillen mooi uit.

Ik zou de manier van Carl gebruiken, MySQL kan die dingen een stuk sneller berekenen dan PHP (een database is daarvoor ontworpen), vooral bij grootte databases gaat dat een stuk sneller zijn (de code van ultddave moet door ieder record loopen)

ultddave
2 May 2010, 21:50
Inderdaad. Ik ben al overgeschakeld op MySQLi ;). Maar had gewoon nog de 'oude' manier gebruikt uit gewoonte :D. Vorig jaar kreeg ik nog les (PHP - MySQL) met mysql. Vanaf nu krijgen alle leerlingen bij ons de les met mysqli.

PS: Merci voor de link. ;)


Ik zou de manier van Carl gebruiken, MySQL kan die dingen een stuk sneller berekenen dan PHP (een database is daarvoor ontworpen), vooral bij grootte databases gaat dat een stuk sneller zijn (de code van ultddave moet door ieder record loopen)
Inderdaad. :D Was vergeten dat je ook in SQL zelf kon checken :D.

Mvg,
Dave

Fck_
3 May 2010, 12:31
Oh dankje mannen ^^ , tis gelukt ! Werkt perfect ^^ .

Heb trouwens met COUNT gewerkt dus, werkt perfect!