Avatar billede ej147 Nybegynder
19. februar 2014 - 19:43 Der er 31 kommentarer og
1 løsning

Min SELECT COUNT virker ikke??

Jeg prøver at lave diverse udregninger med SELECT COUNT men kan ikke få det til at virke - så jeg håber en af jer kan hjælpe mig med at få rette fejlen.

Koden er her:

<?php
include("db.php");
$con=mysqli_connect("","","","gedcom");
mysql_query("SET NAMES 'utf8'");
// Check connection
if (mysqli_connect_error())
  {
  echo "Fejler connect to MySQL: " . mysqli_connect_error();
  }
$data = mysql_query("SELECT COUNT(*) FROM person_st AS 'total',
                    (SELECT COUNT(*) FROM person_st WHERE sex='M' AS 'Mænd'),
                    (SELECT COUNT(*) FROM person_st WHERE sex='F' AS 'Kvinder'),
                    (SELECT COUNT(*) FROM person_st WHERE 'ukendt'='total'-'Mænd'+'Kvinder'),
                    (SELECT COUNT(*) FROM family AS 'familier')");


while($row=mysql_fetch_array($data))
{
echo "<tr><br>";
echo "<td>" . $row['total'] . "</td><br>";
echo "<td>" . $row['M'] . "</td><br>";
echo "<td>" . $row['F'] . "</td><br>";
echo "<td>" . $row['ukendt'] . "</td><br>";
echo "<td>" . $row['familier'] . "</td><br>";
echo "</tr>";
}
?>
       


Jeg får en fejl der siger - fejl i linje 20 som er her:
while($row=mysql_fetch_array($data))

Hvad er det, der går galt her?

mvh Erik
Avatar billede arne_v Ekspert
19. februar 2014 - 19:54 #1
SELECT COUNT(*) FROM person_st AS 'total'

->

SELECT COUNT(*) AS total FROM person_st

o.s.v.
Avatar billede ej147 Nybegynder
19. februar 2014 - 19:57 #2
Tusind tak for det - jeg retter og vender tilbage.
Avatar billede ej147 Nybegynder
19. februar 2014 - 19:59 #3
De 2 fejl er rettet, men jeg får desværre samme fejl??
Avatar billede arne_v Ekspert
19. februar 2014 - 20:05 #4
Hvordan ser koden ud nu?
Avatar billede ej147 Nybegynder
19. februar 2014 - 20:11 #5
Således:

<?php
include("db.php");
$con=mysqli_connect("","","","gedcom");
mysql_query("SET NAMES 'utf8'");
// Check connection
if (mysqli_connect_error())
  {
  echo "Fejler connect to MySQL: " . mysqli_connect_error();
  }
$data = mysql_query("SELECT COUNT(*) AS 'total' FROM person_st),
                    (SELECT COUNT(*) FROM person_st WHERE sex='M' AS 'Mænd'),
                    (SELECT COUNT(*) FROM person_st WHERE sex='F' AS 'Kvinder'),
                    (SELECT COUNT(*) FROM person_st WHERE 'ukendt'='total'-'Mænd'+'Kvinder'),
                    (SELECT COUNT(*) AS 'familier' FROM family)");

while($row=mysql_fetch_array($data))
{
echo "<tr><br>";
echo "<td>" . $row['total'] . "</td><br>";
echo "<td>" . $row['M'] . "</td><br>";
echo "<td>" . $row['F'] . "</td><br>";
echo "<td>" . $row['ukendt'] . "</td><br>";
echo "<td>" . $row['familier'] . "</td><br>";
echo "</tr>";
}
?>
Avatar billede ej147 Nybegynder
19. februar 2014 - 20:40 #6
Her er hele fejlkoden - håber det kan hjælpe:


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 20
Avatar billede arne_v Ekspert
19. februar 2014 - 20:52 #7
ikke '' omkring alias
Avatar billede arne_v Ekspert
19. februar 2014 - 20:52 #8
AS skal altid hen lige efter COUNT(*)
Avatar billede arne_v Ekspert
19. februar 2014 - 20:53 #9
Og saa maa det skulle vaere:

SELECT (...),(...),(...)
Avatar billede ej147 Nybegynder
19. februar 2014 - 20:59 #10
Jeg forstår ikke helt det her:
Mener du at jeg skal fjerne ' fra f.eks 'total' - så det blot skrives total?
Og hvad mener du med SELECT sætningen - hvad har jeg forkert her?
Avatar billede arne_v Ekspert
19. februar 2014 - 21:06 #11
Noget a la:

$data = mysql_query("SELECT (SELECT COUNT(*) AS total FROM person_st),
                    (SELECT COUNT(*) AS male FROM person_st WHERE sex='M'),
                    (SELECT COUNT(*) AS female FROM person_st WHERE sex='F'),
                    (SELECT COUNT(*) AS familier FROM family)");
Avatar billede ej147 Nybegynder
19. februar 2014 - 21:11 #12
Nå sådan, jeg retter lige...
Avatar billede ej147 Nybegynder
19. februar 2014 - 21:16 #13
Efter rettelser får jeg de her fejlkoder:


Notice: Undefined index: total in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 23


Notice: Undefined index: M in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 24


Notice: Undefined index: F in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 25


Notice: Undefined index: familier in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 26
Avatar billede arne_v Ekspert
19. februar 2014 - 21:23 #14
proev og lav en:

print_r($row);

inden i den while loekke og se hvad du har.
Avatar billede ej147 Nybegynder
19. februar 2014 - 21:31 #15
Du bliver nødt til at skære det ud i pap, for at jeg kan forstå det :-)
Mener du dette:

while($row=mysql_fetch_array($data))
{
echo "<tr><br>";
print_r($row);
echo "<td>" . $row['total'] . "</td><br>";
echo "<td>" . $row['male'] . "</td><br>";
echo "<td>" . $row['female'] . "</td><br>";
echo "<td>" . $row['familier'] . "</td><br>";
echo "</tr>";
}


Det gav følgende resultat:

Array ( [0] => 2569 [(SELECT COUNT(*) AS total FROM person_st)] => 2569 [1] => 1262 [(SELECT COUNT(*) AS male FROM person_st WHERE sex='M')] => 1262 [2] => 1277 [(SELECT COUNT(*) AS female FROM person_st WHERE sex='F')] => 1277 [3] => 715 [(SELECT COUNT(*) AS familier FROM family)] => 715 )
Notice: Undefined index: total in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 24


Notice: Undefined index: male in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 25


Notice: Undefined index: female in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 26


Notice: Undefined index: familier in C:\xampp\htdocs\include-9\indhold\slaegt\stati2.html on line 27
Avatar billede arne_v Ekspert
19. februar 2014 - 21:41 #16
maaske

while($row=mysql_fetch_array($data, MYSQL_ASSOC))
Avatar billede arne_v Ekspert
19. februar 2014 - 21:42 #17
Nej. Nok snarere:

$data = mysql_query("SELECT (SELECT COUNT(*) AS total FROM person_st) AS total,
                    (SELECT COUNT(*) AS male FROM person_st WHERE sex='M') AS male,
                    (SELECT COUNT(*) AS female FROM person_st WHERE sex='F') AS female,
                    (SELECT COUNT(*) AS families FROM family) AS families");
Avatar billede ej147 Nybegynder
19. februar 2014 - 21:52 #18
Vidunderligt - det sidste, du har foreslået, virker perfekt.
Tusind tak :-)

Men har du nogen ide til, hvad jeg stiller op med sætningen:
SELECT COUNT(*) FROM person_st WHERE 'ukendt'='total'-'Mænd'+'Kvinder')

Det var meningen, at den skulle udregne forskellen på totale antal personer - minus mænd og kvinder - og resultere i de personer der er af ukendt køn?

mvh Erik
Avatar billede arne_v Ekspert
19. februar 2014 - 21:56 #19
$ukendt = $row['total'] - $row['m'] - $row['k'];
Avatar billede ej147 Nybegynder
19. februar 2014 - 22:04 #20
Ok - tak.
Men hvor og hvordan skal den sættes ind, $ukendt er jo en variabel?
Avatar billede arne_v Ekspert
19. februar 2014 - 22:10 #21
echo "<td>$ukendt</td><br>";
Avatar billede ej147 Nybegynder
19. februar 2014 - 22:19 #22
Det her virker perfekt:

<?php
include("db.php");
$con=mysqli_connect("","","","gedcom");
mysql_query("SET NAMES 'utf8'");
// Check connection
if (mysqli_connect_error())
  {
  echo "Fejler connect to MySQL: " . mysqli_connect_error();
  }

$data = mysql_query("SELECT (SELECT COUNT(*) AS total FROM person_st) AS total,
                    (SELECT COUNT(*) AS male FROM person_st WHERE sex='M') AS male,
                    (SELECT COUNT(*) AS female FROM person_st WHERE sex='F') AS female,
                    (SELECT COUNT(*) AS families FROM family) AS families");

while($row=mysql_fetch_array($data))
{
echo "<tr><br>";
echo "<td>" . $row['total'] . "</td><br>";
echo "<td>" . $row['male'] . "</td><br>";
echo "<td>" . $row['female'] . "</td><br>";
echo "<td>" . $row['families'] . "</td><br>";
echo "</tr>";
}
?>


Men hvordan og hvorledes får jeg dit sidste forslag sat korrekt ind, har prøvet, men det giver fejl?
Avatar billede arne_v Ekspert
19. februar 2014 - 22:28 #23
while($row=mysql_fetch_array($data))
{
$ukendt = $row['total'] - $row['m'] - $row['k'];
echo "<tr><br>";
echo "<td>" . $row['total'] . "</td><br>";
echo "<td>" . $row['male'] . "</td><br>";
echo "<td>" . $row['female'] . "</td><br>";
echo "<td>$ukendt</td><br>";
echo "<td>" . $row['families'] . "</td><br>";
echo "</tr>";
}
Avatar billede ej147 Nybegynder
19. februar 2014 - 22:29 #24
Ok, jeg fandt ud af hvad jeg gjorde galt.
Tusind tak for hjælpen :-)

mvh Erik
ps: send venligst et svar
Avatar billede arne_v Ekspert
19. februar 2014 - 22:30 #25
svar
Avatar billede arne_v Ekspert
19. februar 2014 - 22:31 #26
Jeg forstaar saa slet ikke mixet af mysqli og mysql.
Avatar billede ej147 Nybegynder
19. februar 2014 - 22:31 #27
Perfekt - tak for det.
Avatar billede ej147 Nybegynder
19. februar 2014 - 22:34 #28
Citat:
Jeg forstaar saa slet ikke mixet af mysqli og mysql.

Jeg har godt set det, men jeg må desværre erkende, at jeg heller ikke forstår det.
Har du et forslag hører jeg gerne om det.

mvh Erik
Avatar billede arne_v Ekspert
19. februar 2014 - 22:46 #29
enten bruger du det ene eller det andet
Avatar billede ej147 Nybegynder
19. februar 2014 - 23:24 #30
Ja, det ville være det bedste.
Såvidt jeg kan forstå er mysqli fremtiden - korrekt?
Hvis det er tilfældet, er der så en speciel supergod hjemmeside hvor jeg kan lære mere omkring det?

mvh Erik
Avatar billede arne_v Ekspert
19. februar 2014 - 23:28 #31
Avatar billede ej147 Nybegynder
19. februar 2014 - 23:32 #32
Tak for det. Det er hermed taget til efteretning :-)
Har lige fundet en bog om Mysqli, jeg skal have :-)

mvh Erik
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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