Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Проблем с mysql_fetch_array от SELECT DISTINCT

Featured Replies

Първо ще кажа, че не съм сигурен дали темата е за тук или СУБД, но проблемът е при извеждането на резултат от заявката, така че реших за уместно да питам тук :). Имам таблица в mysql в която имам поле timestamp. Целта е да изведа в падащо меню всички години от които има запис, но

$result = mysql_query("SELECT DISTINCT YEAR(time) FROM table ORDER BY YEAR(time) ASC");
$row = mysql_fetch_array($result);

връща (print_r) само един резултат - в случая най-малката година, а при DESC най-голямата. Дори при опростена заявка SELECT DISTINCT time FROM table масива отново е само с един елемент. Във phpmyadmin обаче връща правилен резултат (или поне какъвто очаквам - всички уникални години). Пробвах и с

SELECT YEAR(time) FROM table group by YEAR(time)

но отново само един резултат, като пак в phpmyadmin си работи както трябва. Търсих много, но никъде не се споменава за подобен проблем и навсякъде се твърди, че това е начина за извличане на уникални записи.

  • Автор

Благодаря за бързия отговор, но отново има само - Array ( [0] => 2014 [a] => 2014 ) при ASC и Array ( [0] => 2017 [a] => 2017 ) при DESC.

преди 9 минути, Stoianoff написа:

Благодаря за бързия отговор, но отново има само - Array ( [0] => 2014 [a] => 2014 ) при ASC и Array ( [0] => 2017 [a] => 2017 ) при DESC.

A какво връща mysql_num_rows($result)

  • Автор

Връща 3, но:

echo("Брой записи: ".mysql_num_rows($result));
echo("<br/>1: ".$row[0]."<br/>2: ".$row[1]."<br/>3: ".$row[2]);

връща:

Брой записи: 3
1: 2014
2:
3:

преди 15 минути, Stoianoff написа:

Връща 3, но:


echo("Брой записи: ".mysql_num_rows($result));
echo("<br/>1: ".$row[0]."<br/>2: ".$row[1]."<br/>3: ".$row[2]);

връща:

Брой записи: 3
1: 2014
2:
3:

Пробвайте да отпечатате $result

  • Автор

ДА!

echo("Брой записи: ".mysql_num_rows($result));
echo("<br/>1: ".mysql_result($result, 0)."<br/>2: ".mysql_result($result, 1)."<br/>3: ".mysql_result($result, 2));

излиза:

Брой записи: 3
1: 2014
2: 2015
3: 2016

Но все пак какво се случва? Този проблем сериозно ме заби.

преди 1 минута, Stoianoff написа:

ДА!


echo("Брой записи: ".mysql_num_rows($result));
echo("<br/>1: ".mysql_result($result, 0)."<br/>2: ".mysql_result($result, 1)."<br/>3: ".mysql_result($result, 2));

излиза:

Брой записи: 3
1: 2014
2: 2015
3: 2016

Но все пак какво се случва? Този проблем сериозно ме заби.

Не знам :) Не разбирам от php

  • Автор

Ами... интересно :) .  Благодаря много за помощта, но все пак бих искал да стигна до същината на проблема. Предполагам, че е нещо заради Apache/PHP-to (2.4.23/5.6.26), но нямам идея какво.

Не ми се вижда разумно да помагате като не сте съвсем наясно. mysql_fetch_array връща само един ред от резултата, като асоцитивен и номериран масив. Можеш и да използваш и mysql_fetch_row, който връща обикновен номериран масив. Днешно време е по-добре да се използва mysqli или PDO.

$result = mysql_query("SELECT DISTINCT YEAR(time) FROM table ORDER BY YEAR(time) ASC");
$years = array();
while ($row = mysql_fetch_row($result)) {
	$years[] = $row[0];
}
print_r($years);

Повечето MySQL extensions работят по подобен начин

  • Автор

Благодаря много! Но това, че, mysql_fetch_array връща само един ред само за DISTINCT ли важи? Защото досега съм го използвал многократно и винаги връща всички резултати. Дори за $result = mysql_query("SELECT YEAR(time) FROM campaign ORDER BY YEAR(time) ASC"); връща всички и добавянето на DISTINCT спира зареждането от 1-ви елемент (имам предвид 2-ри като последователност), т.е. зарежда правилния брой елементи на масива, но от 1-ви нататък са празни. Знам, че трябва да започна да използвам mysqli, но все още не мога да се разделя със стария начин :).

Няма значение дали се ползва DISTINCT. Дори да е само един ред, mysql_query() за SELECT винаги връща резултат, който трябва да се обходи ред по ред по някакъв начин, обикновено с функции като mysql_fetch_array(). Ако няма нито един ред mysql_fetch_array(), веднага  връща false.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.