Как да прередактирам резултат от mysql_fetch_rows?

taxi

Registered
Взех една заявка, която ми изписва от кой пол, колко човека има регистрирани в базата данни. Обаче не мога да го редактирам, да ми излиза така, както аз искам, малко е фиксирано.

Код:
<?php
$link = mysql_connect('localhost', 'dbuser', 'dbpass');
mysql_select_db("db") or die ("no database");
mysql_set_charset('utf8');
$query = "SELECT gender, COUNT(gender) FROM users GROUP BY gender ORDER BY gender"; 

$result = mysql_query($query) or die("Could not execute query");
while ( $row= mysql_fetch_row($result) ) 
{ 
echo ($row[0] .": ". $row[1] ."<br />\n");
}
?>
Примерен резултат:
Жена: 2
Мъж: 3

Искам по отделно да ги давам, ако може просто да ги преброи по отделно, колко има мъж и колко жена, и да си ги изкарам някъде Мъже: / Жени: в последствие, само цифрите.
 
PHP:
$genders = [];
while ( $row= mysql_fetch_row($result) )
{
    $genders[$row[0]] = $row[1];
}

...няколко хиляди реда по-надолу...

PHP:
Мъже: <?=$genders['Мъж'] ?> / Жени: <?=$genders['Жена'] ?>
 
djman каза:
...няколко хиляди реда по-надолу...

Aахаххааха, that's gold.

rtPUS6n.jpg
 
Горният код е стандартно решение но е бавен :)
Пробвай този ама не съм сигурен дали е точен честно казано. :?:
Код:
while ( $row = mysql_fetch_array($result) ) {
 echo "Пол: " . $row[1] . $row["genders"] == "f" ? "females " : "males " ."<hr><br>";
}
 
Как така е бавен??? Авторът иска да използва стойностите някъде в кода.

Как създаването на масив е бавно и какви са критериите за скорост?
 
djman каза:
PHP:
$genders = [];
while ( $row= mysql_fetch_row($result) )
{
    $genders[$row[0]] = $row[1];
}

...няколко хиляди реда по-надолу...

PHP:
Мъже: <?=$genders['Мъж'] ?> / Жени: <?=$genders['Жена'] ?>

Код:
����: 
Notice: Undefined index: ��� in D:\xampp\htdocs\test\gender2.php on line 13
/ ����: 
Notice: Undefined index: ���� in D:\xampp\htdocs\test\gender2.php on line 13

Нещо бъркам, ама не знам какво.. Може би заради кирилицата не го прочита, да пробвам, да ги направя на латиница или цифри? Че пробвах сто пъти да променя енкодинга и никва промяна, може би charset(utf8) трябва да е някъде другаде, не там, където съм го сложил. :oops:
едит:преправих в датабазата потребителите на цифри и се оправи, явно проблема беше от кирилицата, ама къде точно бе проблема.. ходи разбери..

<?php
$link = mysql_connect('localhost', 'dbuser', 'dbpass');
mysql_select_db("dbname") or die ("no database");
mysql_set_charset('utf8');
$query = "SELECT gender, COUNT(gender) FROM users GROUP BY gender ORDER BY gender";
$result = mysql_query($query) or die("Could not execute query");
$genders = [];
while ( $row= mysql_fetch_row($result) )
{
$genders[$row[0]] = $row[1];
}
?>
Мъже: <?php echo($genders['Мъж']); ?> / Жени: <?php echo($genders['Жена']); ?>

novakabg каза:
Код:
while ( $row = mysql_fetch_array($result) ) {
 echo "Пол: " . $row[1] . $row["genders"] == "f" ? "females " : "males " ."<hr><br>";
}

Каквото и да пробвам, излиза ми само:Males<hr>Males<hr>, като резултат.

Код:
<?php
$link = mysql_connect('localhost', 'dbuser', 'dbpass');
mysql_select_db("dbname") or die ("no database");
mysql_set_charset('utf8');
$query = "SELECT gender, COUNT(gender) FROM users GROUP BY gender ORDER BY gender"; 
$result = mysql_query($query) or die("Could not execute query");
while ( $row = mysql_fetch_array($result) ) {
 echo "Пол: " . $row[1] . $row["gender"] == "Мъж" ? "females " : "males " ."<hr><br>";
}
?>
Това е пример, пробвах и в row, да пусна някой от половете.. ама само males males ми излиза.. :?
едит: Вади ми Мъж/Жена и сега промених единия потребител на gender=1 и ми изкара трети ред male <hr>

@Heytar всеки трябва да почне от някъде..


п.с. В крайна сметка стана с кода на @Djman. Благодаря на всички. Ще оставя темата отключена до утре, ако някой има нещо да допълни, ако не, ще му дам точицата на него.
 
@taxi, разбираш ли какво прави @djman?
Тази конструкция:

PHP:
$genders = [];

while ( $row= mysql_fetch_row($result) )
{
    $genders[$row[0]] = $row[1];
Създава празен масив ($genders = [];), a след това го пълни с резултатите от заявката.

При работа с php функцията var_dump е много полезна - изплюва цялото съдържание на подадената променлива. В твоя случай след цикъла (където се пълни масивът $genders) сложи един ред:

PHP:
var_dump($genders);

Така ще видиш какво е направил кода в цикъла.

Можеш да сложиш var_dump-a и вътре в цикъла и да видиш резултатите от всяка итерация. Поиграй си докато разбереш какво се случва.

Предполагам, че ключовете на масива не са "Мъж" и "Жена", ами male & female, но до този извод ще стигнеш сам като разгледаш какво се случва.
 
малко грешно да правиш по този начин нещата, но това е един quick фикс, като цяло за това го предлагам, не защото е много прваилно. Но нали така казват, щом работи .. ;д

Та, върни си кода както в началото + базата данни -там ключовете каквото си сменял и пробвай така:
PHP:
<?php
$link = mysql_connect('localhost', 'dbuser', 'dbpass');
mysql_select_db("db") or die ("no database");
mysql_set_charset('utf8');
$query = "SELECT gender, COUNT(gender) FROM users GROUP BY gender ORDER BY gender"; 

$result = mysql_query($query) or die("Could not execute query");
while ( $row= mysql_fetch_row($result) ) 
{ 
echo (($row[0]  == 'Мъж' ? 'Мъже' : 'Жени' ).": ". $row[1] ." / ");
}
?>

Както вече ти казаха, не трябва ключовете да са ти кирилица. Най-добре е да са цифри, 1 - мъж, 2 - жена или нещо такова. :?:
 
Както вече ти казаха, не трябва ключовете да са ти кирилица. Най-добре е да са цифри, 1 - мъж, 2 - жена или нещо такова.
Да, и за удобство да използва константи:

PHP:
const GENDER_MALE = 0;
const GENDER_FEMALE = 1;

$row[GENDER_MALE] = "Мъж";
echo $row[GENDER_MALE];
 
@joTunkiq ти е дал добър код :)
@djman кода ти е добре просто реших да се пошегувам защото се заяждаш с мен цял месец :)
:?: :D

Ето ти един добър пример, като за мен е точно:

Код:
<?php 
// Връзка към базата 
$vruzka  = mysqli_connect(host,db,..);
// Connect vruzka
$connectdb = mysqli_query($vruzka, $query);

// if row
 if (mysqli_num_rows($connectdb) == 1) {
    // User Info
    $row = mysqli_fetch_array($connectdb);
    if (!empty($row['gender'])) {
      echo 'Gender:';
      if ($row['gender'] == 'M') {
        echo 'Male';
      }
      else if ($row['gender'] == 'F') {
        echo 'Female';
      }
      else {
        echo '?';
      }
    }
  } 
  else {
    echo 'Има проблем';
  }
  ?>
 
novakabg каза:
@djman кода ти е добре просто реших да се пошегувам защото се заяждаш с мен цял месец :)

//off: единственото ни взаимодействие беше в твоя тема за изтриване на кеш, където без лоши чувства те попитах защо не искаш решение А, а после дадох линк към много решения... Но както и да е :D

За да не е съвсем off:

PHP:
$genders = [];
while ( $row= mysql_fetch_row($result) )
{
    $genders[$row[0] === 'Мъж' ? 0 : 1] = $row[1];
}

или, разбира се, с константи ще е по-четимо, но като гледам тук няма класове :)
 

Горе