Avatar billede hcthorsen Praktikant
20. juli 2009 - 14:02 Der er 8 kommentarer og
1 løsning

mySQL: Nogen der kan hjælpe med denne "søge-streng"

Jeg kunne godt tænke mig at lave nedenstående lidt ere fikst. Jeg er nybegynder både hvad angår mySQL og PHP, så I må bære over med at jeg måske ikke lige bruge den rigtige jargon:-). Jeg laver følgende søgninger i min db:

$akut = mysqli_query ($conn, "SELECT COUNT(*) as antal FROM erfaring_anaestesier WHERE user = '$_SESSION[user]' AND prioritering = 'Akut'");
$elektiv = mysqli_query ($conn, "SELECT COUNT(*) as antal FROM erfaring_anaestesier WHERE user = '$_SESSION[user]' AND prioritering = 'Elektiv'");

Det virker fint, men kunne man lave en forespørgsel så resultatet blev en array ala 

array( 'prioritering' => 'akut', 'antal' => 5)
array( 'prioritering' => 'elektiv', 'antal' => 10)
array( 'prioritering' => 'blabla', 'antal' => 10)

Det måtte meget gerne være sådan, at man ikke skulle definere værdien af 'prioritering', men der blev blot lavet en optælling af hvor mange gange et givent ord forekom.
Avatar billede dmdisco Nybegynder
20. juli 2009 - 15:05 #1
du kan bruge group by sammen med count og så få et tal på hvor mange af hver slags prioteringer der findes, hvis du kan bruge det
Avatar billede dmdisco Nybegynder
20. juli 2009 - 15:09 #2
noget i den her stil

SELECT `prioritering`, COUNT(`prioritering`) AS antal FROM `erfaring_anaestesier` GROUP BY `prioritering`
Avatar billede hcthorsen Praktikant
20. juli 2009 - 15:27 #3
Tusind tak. Det ser ud til at virke perfekt!!! Dog ville jeg gerne have min WHERE user = '$_SESSION[user]' med. Nedenstående virker ikke:

SELECT `prioritering`, COUNT(`prioritering`) AS antal FROM `erfaring_anaestesier` WHERE user = '$_SESSION[user]' GROUP BY `prioritering`

Nogen forslag?
Avatar billede dmdisco Nybegynder
21. juli 2009 - 10:27 #4
det burde ellers gerne virke

hvad returnere den med

SELECT `prioritering` FROM `erfaring_anaestesier` WHERE user = '$_SESSION[user]'

og hvad returnere den uden where
Avatar billede hcthorsen Praktikant
22. juli 2009 - 09:39 #5
Den returnerer ingenting. Jeg har prøvet med en anden WHERE-sætning, og det fungerer, så det må være et eller andet med min $_SESSION[user] der ikke er defineret. Det kan jeg bare ikke forstå, for jeg har jo eksempelvis brugt

$akut = mysqli_query ($conn, "SELECT COUNT(*) as antal FROM erfaring_anaestesier WHERE user = '$_SESSION[user]' AND prioritering = 'Akut'");

tidligere på samme sted i koden, og det har virket upåklageligt. Under alle omstændigheder må du lige smide et svar, så du kan få dine point. Tak for hjælpen indtil videre...
Avatar billede hcthorsen Praktikant
22. juli 2009 - 10:05 #6
Jeg fatter det ikke. Det viser sig at

SELECT `prioritering`, COUNT(`prioritering`) AS antal FROM `erfaring_anaestesier` WHERE user = '$_SESSION[user]' GROUP BY `prioritering`

giver det rigtige output. Jeg skal imidlertid bruge data i JPGraph, og det er her det går galt. Min kode er:

<?php
include ("../../jpgraph/src/jpgraph.php");
include ("../../jpgraph/src/jpgraph_pie.php");
include ("../../jpgraph/src/jpgraph_pie3d.php");
include ("../../dbconnect.inc");

/*
$sql = mysqli_query ($conn, "SELECT `anaestesi`, COUNT(`anaestesi`) AS antal FROM `erfaring_anaestesier` GROUP BY `anaestesi`");
while ($row = mysqli_fetch_array($sql)) {
$data[] = $row['antal'];
$leg[] = $row['anaestesi'];
}
*/
session(start);
$sql = mysqli_query ($conn, "SELECT `anaestesi`, COUNT(`anaestesi`) AS antal FROM `erfaring_anaestesier` WHERE user = '$_SESSION[user]' GROUP BY `anaestesi`");
while ($row = mysqli_fetch_array($sql)) {
$data[] = $row['antal'];
$leg[] = $row['anaestesi'];
}

$graph = new PieGraph(475,200,"auto");
$graph->title->Set("Anaestesier fordelt paa anaestesi-form");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$p1 = new PiePlot3D($data);
$p1->SetCenter(0.30);
$p1->SetLegends($leg);
$graph->Add($p1);
$graph->Stroke();
?>

Det virker fint når jeg bruger søgestrengen uden WHERE, men ikke med. Meget mærkeligt!!
Avatar billede dmdisco Nybegynder
22. juli 2009 - 10:12 #7
det er jo klart det ikke virker hvis din where clause gør at der ikke bliver returneret noget, problemet er nok at hvis en bruger ikke findes i tabellen så får du ikke returneret noget og skal faktisk bruge 0, men det kan der jo laves en tjek på at hvis der ikke bliver returneret noget fra mysql så skal værdien sættes til 0

jeg kender ikke det graf script så jeg aner ikke hvordan det er bygget op, men jeg gætter bare på at det ikke virker uden min. et tomt array, dette kan dog løses ved bare at sætte et tomt array i starten.

$data = array();
$leg = array();
Avatar billede hcthorsen Praktikant
22. juli 2009 - 10:23 #8
Jamen jeg har fundet ud af at søgningen med WHERE returnerer det rigtige, men det virker alligvel ikke. Jeg begriber det ikke...
Avatar billede hcthorsen Praktikant
22. juli 2009 - 13:17 #9
Ahhhh, det hjalp selvfølgelig med

session_start();

i stedet for

session(start);

Jeg kan dog ikke ikke forstå at der er nødvendigt. Jeg har en session_start(); i mit hovedscript.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester