- Как да прередактирам резултат от mysql_fetch_rows?
WT форуми -> PHP MySQL ASP.NET -> Как да прередактирам резултат от mysql_fetch_rows?
Създайте нова тема Напишете отговор 
Автор Съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 519
Мнение 12/10/2017 5:56 am     Как да прередактирам резултат от mysql_fetch_rows? Отговорете с цитат


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


<?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


Искам по отделно да ги давам, ако може просто да ги преброи по отделно, колко има мъж и колко жена, и да си ги изкарам някъде Мъже: / Жени: в последствие, само цифрите.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 103
Bonus: 196
Мнения: 2768
Мнение 12/10/2017 8:00 am      Отговорете с цитат


PHP code:
$genders = [];
while ( $row= mysql_fetch_row($result) )
{
$genders[$row[0]] = $row[1];
}


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

PHP code:
Мъже: <?=$genders['Мъж'] ?> / Жени: <?=$genders['Жена'] ?>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 340
Bonus: 678
Мнения: 2556
Мнение 12/10/2017 2:13 pm      Отговорете с цитат


djman написа:

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


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

Как да прередактирам резултат от my
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
novakabg
Турист
Турист

Регистриран на: 13/05/2016 2:29 pm

Support: 5
Bonus: 10
Мнения: 222
Мнение 12/10/2017 4:35 pm      Отговорете с цитат


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

Регистриран на: 12/09/2009 10:07 am

Support: 103
Bonus: 196
Мнения: 2768
Мнение 12/10/2017 4:54 pm      Отговорете с цитат


Как така е бавен??? Авторът иска да използва стойностите някъде в кода.

Как създаването на масив е бавно и какви са критериите за скорост?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
heytar
Нов
Нов

Регистриран на: 29/06/2015 9:28 am

Support: 0
Bonus: 0
Мнения: 48
Мнение 12/10/2017 8:25 pm      Отговорете с цитат


Докога ще се толерира ползването шит код?!?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 519
Мнение 12/10/2017 9:30 pm      Отговорете с цитат


djman написа:
PHP code:
$genders = [];
while ( $row= mysql_fetch_row($result) )
{
$genders[$row[0]] = $row[1];
}


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

PHP code:
Мъже: <?=$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) трябва да е някъде другаде, не там, където съм го сложил. Embarassed
едит:преправих в датабазата потребителите на цифри и се оправи, явно проблема беше от кирилицата, ама къде точно бе проблема.. ходи разбери..

Цитат:

<?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 ми излиза.. Confused
едит: Вади ми Мъж/Жена и сега промених единия потребител на gender=1 и ми изкара трети ред male <hr>

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


п.с. В крайна сметка стана с кода на @Djman. Благодаря на всички. Ще оставя темата отключена до утре, ако някой има нещо да допълни, ако не, ще му дам точицата на него.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 141
Bonus: 281
Мнения: 1308
Мнение 12/10/2017 10:03 pm      Отговорете с цитат


@taxi, разбираш ли какво прави @djman?
Тази конструкция:

PHP code:
$genders = [];

while ( $row= mysql_fetch_row($result) )
{
$genders[$row[0]] = $row[1];

Създава празен масив ($genders = []Wink, a след това го пълни с резултатите от заявката.

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

PHP code:
var_dump($genders);


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

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

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

Регистриран на: 25/12/2012 12:03 pm

Support: 122
Bonus: 244
Мнения: 757
Мнение 13/10/2017 10:22 am      Отговорете с цитат


малко грешно да правиш по този начин нещата, но това е един quick фикс, като цяло за това го предлагам, не защото е много прваилно. Но нали така казват, щом работи .. ;д

Та, върни си кода както в началото + базата данни -там ключовете каквото си сменял и пробвай така:
PHP code:
<?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 - жена или нещо такова. Question
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 141
Bonus: 281
Мнения: 1308
Мнение 13/10/2017 10:29 am      Отговорете с цитат


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

Да, и за удобство да използва константи:

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

$row[GENDER_MALE] = "Мъж";
echo $row[GENDER_MALE];
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
novakabg
Турист
Турист

Регистриран на: 13/05/2016 2:29 pm

Support: 5
Bonus: 10
Мнения: 222
Мнение 13/10/2017 2:44 pm      Отговорете с цитат


@joTunkiq ти е дал добър код Smile
@djman кода ти е добре просто реших да се пошегувам защото се заяждаш с мен цял месец Smile
Question Very Happy

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

<?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 'Има проблем';
  }
  ?>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 103
Bonus: 196
Мнения: 2768
Мнение 13/10/2017 9:17 pm      Отговорете с цитат


novakabg написа:
@djman кода ти е добре просто реших да се пошегувам защото се заяждаш с мен цял месец Smile


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

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

PHP code:

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


или, разбира се, с константи ще е по-четимо, но като гледам тук няма класове Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети