webForumDet fria alternativet

Häta olika data ur mysql tabell beroende på variabler

PHP

2 svar · 462 visningar · startad av noratx

Medlem sedan feb. 200193 inlägg
Frågan#1

Hej!

jag försöker skapa en funktion där jag vill hämta olika statistik data från en tabell, beroende på vilka variabler jag väljer.

I tabellen finns olika värden under year, month, week, day, hour
dessa efterfrågas med
adress/stats.php?action=getstats&year=2010&month=01&week=02&day=11&hour=13

Det är dock inte säkert att alla dessa variabler anges. Jag kan lika gärna endast ange action=getstats&year=2010&week=01

Jag vill då i min sql-fråga endast selextera det angivna året och veckan.
Frågan är hur jag på bästa sätt uppnår detta?

Hur skall jag urforma sql-frågan? Och hur får jag relevanta variabler på rätt sats i sql-frågan?

Jag funderar på om inte vsaret kan ligga i array(), problemet är bara att jag aldrig experimenterat med arrayer och därför inte har en aning om hur jag skapar en array utifrån angivna variabler.
Inte heller hur jag får dit arrayen med endast de variabler jag angivit.

Medlem sedan jan. 2005953 inlägg
#2

Rent spontant skulle jag nog göra så här:

Skapa en array med "tillåtna" kolumner. Detta för att ingen ska kunna hämta information som inte ska visas. Använd sedan denna array tillsammans med $_GET i funktionen array_intersect_key. Loopa sedan igenom den nya arrayen du får som resultat från den funktionen, och bygg upp en WHERE-sats till din SQL-fråga.

Demonstrerar med lite kod:

$valid_columns = array('year'=>'', 'month'=>'', 'week'=>'', 'day'=>'', 'hour'=>'', 'minute'=>'');
$columns = array_intersect_key($_GET, $valid_columns);

$where = array();
foreach($columns as $k=>$v) {
    $where[] = '`' . $k . '`' = '"' . $v . '"';
}

$sql = 'SELECT * FROM tabell WHERE ' . implode(' AND ', $where);
Medlem sedan feb. 200193 inlägg
#3

Tack för svaret Metalboy.

Då är bara frågan, eftersom inte alla variabler behöver bli selekterade, hur visar jag resultaten?

Det jag behöver få ut är något i stil med (alla tecken jag visar på nedan rad är menade att visas):

Years2009,2010Months1,2,3,4,5,6,7,8,9,10,11,12Weeks1,2,3,4,5,6Days1,2,3,4,5Hours1,2,3,4,5,6,7,8,9

Allt ihop på en rad.
Vanligtvis brukar jag bara köra typ echo "Years $row[years]";
men det känns inte som om att det kommer funka nu, right?

255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)