[php & mysql] dziwny problem z sortowaniem...

0

Mam dość dziwny problem. Napisałem skrypt używając biblioteki curl odczytujący nazwe piosenki i ilość słuchaczy radia ze strony: http://listen2myradio.com/number2.php?ip=208.109.208.191&port=40452
Nastepnie odczytane dane wrzuca do bazy danych. Na innej stronie te dance są wyświetlane. Ustawił ORDER BY nazwa_piosenki ASC wieć powinno je ustawiać alfabetycznie. No i ustawia. Problem pojawia się gdy zedytuje jakieś pole w danym rekordzie wtedy zedytowany rekord ustawia na końcu listy. Wygląda to mniej wiecej tak:

aaa_rekord_nie_edytowany
bbb_rekord_nie_edytowany
ccc_rekord_nie_edytowany
abb_rekord_edytowany
baa_rekord_edytowany
cca_rekord_edytowany

Tak je ustawia, choć jest ustawione aby sortowało je alfabetycznie a ustawia alfabetycznie jakby osobno rekordy które nie były nigdy edytowane i osobno rekordy edytowane. Dlaczego tak sie dzieje? Czy da się coś zrobić aby tak się nie robiło?

0

za mało danych ...

0

??? nie rozumiem....

0

Podaj cale zapytanie, bo wyglada jakby bylo jeszcze cos innego w order by.

@Adamo: zabrzmialo jak odpowiedz robota :)

0

No na pewno zapytanie jest dobrze:

SELECT * FROM played ORDER BY id3tag ASC

Strasznie dziwne...

$url = "http://www.listen2myradio.com/number2.php?ip=208.109.208.191&port=40452";

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt ($ch, CURLOPT_PORT , 80); 
curl_setopt ($ch, CURLOPT_TIMEOUT , 300); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec($ch); 
curl_close($ch); 

$listeners = str_replace("<", '', $contents);
$listeners = str_replace("/", '&nbsp;', $listeners);

$delimiter = "&nbsp;";
$splitcontents = explode($delimiter, $listeners);

$up = strpos($contents, 'Refused');
if($up === false) {
$song = $splitcontents[7];
$listeners = $splitcontents[1] . ' Listener(s)';

if(strlen($splitcontents[7]) < 3){
$song = "No song currently playing.";
} else {
$song = $splitcontents[7];
$song2 = $splitcontents[7];
}

} else {
$song = 'The server is currently down.';
$listeners = 'Radio down';
}

echo '<font face="courier new" size="2">'.$song;
$teraz = time();
$song2 = substr($song2,1);
mysql_connect('xxx,'xxx','xxx');
mysql_select_db('xxx');
$sth = mysql_query("SELECT * FROM played WHERE id3tag = '$song2'");
$ile = mysql_num_rows($sth);
    if($song2 && $ile == 0)
    {
        mysql_query("INSERT INTO played (id3tag, time) VALUES ('$song2','$teraz')");
    }

?>

</span>

0

to jest kod php odczytujący z tej strony te dane i wrzucający je do bazy.

0

wejdź przez phpmyadmin i zadaj mu to samo pytanie, czy odpowie też tak dziwnie ? podaj definicję pola id3tag, ew. uwagi dostane od mysql, gdzie jest kod odpowiedzialny za edytowanie, wyświetlanie

to nie jest raczej standardowe zachowanie więc pewnie zostało przez ciebie niechcący zaprogramowane, a bez kodu ciężko jest zgadnąć ...

0

w phpmyadmin tak samo dziwnie wyświetla, dziwną rzeczą jest że te nieedytowane pola wyświelta pole id3tag był w dwóch linijkach w tym pierwsza jest pusta a w drugiej jest nazwa piosenki dopiero, tym bardziej to jest dziwne że to jest pole typu VARCHAR czyli powinno mieć jedną linijke ;/

0

W polu varchar nie ma nic o jednej, czy w ogole o ilosci linijek. Najwyraznie gdzies zostaje Ci znak linii i wpisujesz np. "\nnazwa piosenki". Mozliwe, ze w takim razie edytowane pole to np. "nazwa edytowanej piosenki".
Idac zgodnie z alfabetem, to \n jest wczesniej niz jakakolwiek litera (bo 13 ASCII), wiec te z \n na poczatku wyswietlane sa najpierw, dopiero pozniej nastepne w kolejnosci alfabetycznej - czyli zaczynajace sie od normalnych znakow (np. 'a', 'b', itp).

0

przepuść $song2 przez trim i powinno być ok, a robisz z pierdoły archiwum X
najpierw mówisz że pola są takie same a po 5 godzinach ujawniasz że jednak w tych nieedytowanych jest znak nowej linii ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0