Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z zapytaniem sortowania na serwerze
Forum PHP.pl > Forum > Przedszkole
lukmar
Witam 

mam problem z zapyatniem do bazy i sortowaniem otrzymanego wyniku mam  w php zapytanie

Kod
<P><? </P><P>$zapytanie = 'SELECT * FROM telefony_sklep WHERE (stan = "'.$sort22.'" OR stan = "'.$sort2.'") AND id_etapu ="'.$sort1.'" AND id_sklep="'.$id_sklepu.'"  ORDER BY  "'.$sort3.'" DESC';</P><P>?></P>


chce sortować odpowiednio wyniki za pomocną zmiennej $sort3 która odpowiednio przyjmuje wartości np data_kupienia itd.

Na localhoscie działa łądnie ale po wrzuceniu na serwer niestety wybiera mi odpowiednie dane ale nie sortuje ich jak należy. 

Zauważyłem że jest różnica w zapytaniu jeśli zrobie je w phpMyAdmin na localu a na serwerze:

na localu mam

Kod
SELECT * FROM `telefony_sklep` ORDER BY `model_sklep` ASC  LIMIT 0 , 30




a na serwerze te samo zapytanie wygląda 

Kod
SELECT * FROM `telefony_sklep` ORDER BY `telefony_sklep`.`model_sklep` ASC LIMIT 0 , 30




dodatkowo po ORDER dodaje jeszcze raz nazwe tabeli, próbowałem to zapytanie odpowienio przełożyć na kod PHP ale nie daje rady smile.gif

 robiłęm już:
  • ORDER BY telefony sklep . "'.....
  •  ORDER BY "telefony sklep" . "'.....
  •  ORDER BY 'telefony sklep' . "'.....
  •  ORDER BY "'telefony sklep'" . "'.....
  •  ORDER BY "'.telefony sklep.'" . "'.....
  • $zmienna = "telefony_sklep";
  • ORDER BY "'.$zmienna.'" . "'.....
  •  ORDER BY (telefony sklep AND . "'.....)
I nadal nic smile.gif Nie wiem jak poprawnie siędo tego odwołać, 

Na serwerze stoi phpMyAdmin 3.1.3 / MySql 5.0.67



Jeśli ktoś wie jak poprawnie powinno wyglądać to zapytanie to byłbym wdzięczny za pomoc 





 
korro
Sortuje się po nazwie kolumny, nie tabeli.
lukmar
Tak wiem dlatego też dziwi mnie to zapytanie wykonane w phpMyAdmin po stronie serwera,

Tak też miałem zrobioną aplikację i na localhoscie działa ale po wrzuceniu na serwer nie chce.

I męcze to już od paru godzin i szukam błedu w moim kodzie, i zauważyłem to dziwne zapytanie w  phpMyAdmin po stronie serwera, gdzie zaraz po ORDER BY jest jeszcze dodatkowao nazwa kolumny.



?I próbuje pod to zapytanie z serwerka ułożyć kod PHP i ni w ząb
korro
Może po prostu w tym zapytaniu które widziałeś, w tabeli o nazwie X jest kolumna o nazwie X.

No i upewnij się, czy kolumny po order oddzielone są przecinkiem, nie kropką.
lukmar
No w tabeli X nie ma kolumny X.

Są to dwie identyczne bazy z identyczną strukturą i po wykonaniu zapytania tego samego na localhoscie i serwerze otrzymuje dwa różne kody.

Podejżewam iż jest to spowodowane różnicą wersji PhpMyAdmin,

no było nie było na localu wszystko śmiga ładnie, na serwerku nie.

na serwerku wybiera mi dane takie jakie chce itd ale nie sortuje coś po ORDER BY się sypie.

Zaraz sprawdze jeszcze jakieś zapytanie z przecinkiem.

Dziwi mnie tylko te zapytanie z serwera gdzie wpisali tam po ORDER BY jeszcze raz nazwe tabeli.

Na serwerze są dwi bazy moja i jakaś z serwerka z błędami która już tam była ale to nie powinno mieć wiekszego znaczenia przecież smile.gif

No niestety przecinek nie pomaga sad.gif

Dodam jeszcze że zapytania te dla porównywania wykonywałem poprzez kliknięcie na nazwę kolumny tak aby się posortowały odpowiednio dane.

Zrobiłem jeszcze osobno zapytanie w phpMyAdmin na serwerze o treści :

Kod
SELECT *
FROM `telefony_sklep`
ORDER BY `telefony_sklep`.`model_sklep` ASC


oraz dodatkowo
Kod
SELECT *
FROM `telefony_sklep`
ORDER BY `model_sklep` ASC


i serewerek nie zwraca błędów oba zapytania są poprawne z poziomu poleceń SQL na serwerze w phpMyAdmin.

Ale jak próbuje się odwoływać z poziomu PHP to zero odzewu.
Zmienne które ustawiam na sort3 zgadzają się z nazwami kolumn. (wypisuje je dla sprawdzenia tuż przed wykonaniem zapytania). Szukałem jakieś literowk i nic.

Dalej na localhoscie ten sam kod śmiga ładnie a na serwerze nie lata

oto kodzik tej strony może to coś pomoże

Kod
<?php
session_start();
include('menu_sklep.php');
include('menu_administracja.php');
include('naglowek.php');

if (isset($_GET['sprzedaj']))
    {
        $sprzedaj=$_GET['id'];
        $data=date('Y.m.d H.i');
    $zapytanie='UPDATE telefony_sklep SET id_etapu="11", data_sprzedazy="'.$data.'" WHERE id_telefon_sklep="'.$sprzedaj.'";';
    $wynik=@mysql_query($zapytanie);
    }
    
$zapytanie = 'SELECT * FROM pracownik where login="'.$login.'";';
$wynik= mysql_query($zapytanie,$polaczenie);
$rekord = mysql_fetch_assoc($wynik);
$upr=$rekord['id_uprawnienia'];



?>

<body>
<div id=content>
<div id=header>

        <div id="menu">
            <?php include ('menu_header.php') ?>
        </div>
    </div>
<div id="main">

<?php
if ($zapytanie!=0)
{
echo "Telefon sprzedany exclamation.gif!";
}

?>

<h5>Telefony do sprzedaży na sklepie </h5><a href="telefony_sklep_admin.php">Inne sklepy</a>&nbsp;|&nbsp;<a href="javascript:printWindow()">Drukuj stronę</a>&nbsp;&nbsp;

<br><br>

pokaż według :<br>

<form action="telefony_sklep.php" method="post">
    <select name="sort1">
      <option>Nie sprzedane</option>
        <option>Sprzedane</option>
    </select>
    <select name="sort2">
      <option>Nowe i Uzywane</option>
      <option>Nowe</option>
        <option>Uzywane</option>
    </select>
    <select name="sort3">
        <option>Marki</option>
      <option>Daty</option>
        <option>Ceny</option>
        <option>Modelu</option>
        <option>Koloru</option>
        <option>Stanu</option>
    </select>
        <select name="sort4">
      <option>Rosnąco</option>
        <option>Malejąco</option>
    </select>
     <button type="rodzaj">Pokaż</button>
</form>



<?php


$sort1=$_REQUEST['sort1'];
$sort2=$_REQUEST['sort2'];
$sort3=$_REQUEST['sort3'];
$sort4=$_REQUEST['sort4'];

switch ($sort1)
{
    case "Nie sprzedane";
     $sort1 = "10";
     break;
    case "Sprzedane";
     $sort1 = "11";
     break;
    default:
     echo "wybierz opcje wyświetlania i kliknij POKAŻ";
     break;
}

//  echo "<br>sort1 ma wartość =" . $sort1;

switch ($sort2)
{
    case "Nowe";
     $sort2 ="nowy";
     break;
    case "Uzywane";
     $sort2 = "uzywany";
     break;
     case "Nowe i Uzywane";
     $sort2 = "nowy";
     $sort22 = "uzywany";
     break;
   default:
     //echo "coś nie tak";
     break;
}

// echo "<br>sort2 ma wartość =" . $sort2;
//    echo "<br>sort22 ma wartość =" . $sort22;

switch ($sort3)
{
    case "Ceny";
     $sort3 = "cena_sprzedazy";
     break;
     case "Daty";
     $sort3 = "data_odebrania";
     break;
     case "Marki";
     $sort3 = "marka_sklep";
     break;
     case "Modelu";
     $sort3 = "model_sklep";
     break;
     case "Koloru";
     $sort3 = "kolor_sklep";
     break;
     case "Stanu";
     $sort3 = "stan";
     break;
    default:
    // echo "coś nie tak";
     break;
}
  switch ($sort4)
{
     case "Malejąco";
     $sort4 = "DESC";
     break;
     case "Rosnąco";
     $sort4 = "ASC";
     break;
   default:
    // echo "coś nie tak";
     break;
}
;

echo "Wyświetlam według: " ."$nbsp sort3: <b>" . $sort3 . " sort2- " . $sort2 ." sort1- ". $sort1 . " sort4- " . $sort4 ."\n<br>";


if ($sort1 == "10")
{
echo('<br>
<br>


<table border="1"; padding left="20px">
<tr>     <th style="width: 8em"> Marka </th><th style="width: 5em"> Model </th><th style="width: 5em"> Kolor </th><th style="width: 9em"> Imei </th><th style="width: 8em"> Kod telefonu </th> <th style="width: 5em"> Nowy / Używany </th><th> Cena sprzedaży </th> <th> Funkcje </th></tr>');


//$id_etap = "10";
$zapytanie = 'SELECT * FROM telefony_sklep WHERE (stan = "'.$sort22.'" OR stan = "'.$sort2.'") AND id_etapu ="'.$sort1.'" AND id_sklep="'.$id_sklepu.'" ORDER BY  "'.$sort3.'" '.$sort4.' ';

$wynik= mysql_query($zapytanie,$polaczenie);

while ($rekord = mysql_fetch_assoc($wynik))
{
    $data_poczatek = $rekord['data_odebrania'];
        include('oblicz_date.php');        
        if (  $roznica >= 30  )
         {
         echo "<tr style=\"background-color: #ff0000\"; align: \"center\">"
    ;}




echo "<td>" . " <center> " . $rekord['marka_sklep'] . "</td><td>" . " <center> " . $rekord['model_sklep'] . "</td><td>" . " <center> ". $rekord['kolor_sklep'] . "</td><td>" . " <center> ". $rekord['imei_sklep'] . "</td><td>"  .  " <center> ". $rekord['kod_telefonu'] . " </td><td>"  .  " <center> ". $rekord['stan'] . " </td><td>" .  " <center> " .$rekord['cena_sprzedazy'] . "</td><td width=\"150px\">"?>    


    <form action="sprzedaj_telefon.php?sprzedaj&id=<?php echo $rekord['id_telefon_sklep'] ?>" method="POST">
                <select name="przekaz">
                <option>sprzedaj</option>
                <option>przekaż</option>
                </select>
                <button input type="submit" value="OK" />OK</button>
                </form>
            


</td><?php

echo "</tr>\n";


}
echo ('</center>
</p>
</table>
');
}

else

{
echo
('<br>
<br>


<table border="1"; padding left="20px">
<tr>     <th style="width: 8em"> Marka </th><th style="width: 5em"> Model </th><th style="width: 5em"> Kolor </th><th style="width: 9em"> Imei </th><th style="width: 8em"> Kod telefonu </th> <th style="width: 5em"> Nowy / Używany </th><th> Cena sprzedaży </th> <th> Data sprzedaży</th></tr>');


//$id_etap = "10";
$zapytanie = 'SELECT * FROM telefony_sklep WHERE (stan = "'.$sort22.'" OR stan = "'.$sort2.'") AND id_etapu ="'.$sort1.'" AND id_sklep="'.$id_sklepu.'"  ORDER BY   "'.$sort3.'" DESC';

$wynik= mysql_query($zapytanie,$polaczenie);

while ($rekord = mysql_fetch_assoc($wynik))
{
echo "<tr style=\"background-color: #eaeaea\"; align: \"center\">";
echo "<td>" . " <center> " . $rekord['marka_sklep'] . "</td><td>" . " <center> " . $rekord['model_sklep'] . "</td><td>" . " <center> ". $rekord['kolor_sklep'] . "</td><td>" . " <center> ". $rekord['imei_sklep'] . "</td><td>"  .  " <center> ". $rekord['kod_telefonu'] . " </td><td>"  .  " <center> ". $rekord['stan'] . " </td><td>" .  " <center> " .$rekord['cena_sprzedazy'] . "</td><td>" . " <center> " . $rekord['data_sprzedazy'] . "</td>
";

echo "</tr>\n";


}
echo ('</center>
</p>
</table>
');
}

echo ($query);



if (isset($_GET['sprzedany']))
    {
    
$id=$_GET['id'];
//$_SESSION['id_telefon_sklep']=$id;


echo(' <br><hr class="linia"> Sprzedano : ');

$zapytanie = 'SELECT * FROM telefony_sklep WHERE id_telefon_sklep= "'.$id.'"';
$wynik= mysql_query($zapytanie,$polaczenie)or die;
while ($rekord = mysql_fetch_assoc($wynik)or die )
{

echo  $rekord['marka_sklep'] . " " . $rekord['model_sklep'] ." za kwotę :" .$rekord['cena_sprzedazy'] . " zł <br><hr class=\"linia\">";

}
;}

if (isset($_GET['przekazany']))
    {
    
$id=$_GET['id'];
//$_SESSION['id_telefon_sklep']=$id;


echo(' <br><hr class="linia"> Przekazano : ');

$zapytanie = 'SELECT * FROM telefony_sklep,sklepy WHERE telefony_sklep.id_sklep=sklepy.id_sklepu AND telefony_sklep.id_telefon_sklep= "'.$id.'"';
$wynik= mysql_query($zapytanie,$polaczenie)or die;
while ($rekord = mysql_fetch_assoc($wynik)or die )
{

echo  $rekord['marka_sklep'] . " " . $rekord['model_sklep'] . " na sklep " . $rekord['nazwa_sklepu'] . " <hr class=\"linia\"> ";

}
;}?>



</div>
</div>
</body>
</html>
trike
wydaje mi sie ze mozesz miec problem z cudzyslowami i apostrofami w zapytaniu do bazy
lukmar
z tym że zapytanie działa po wykonaniu zapytania dostaje odpowiednie dane typu teleofny tylko nowe, telefony tylko używane, nowe i używane itd. 

Ale zapytanie ginie po ORDER BY po prostu nie sortuje otrzymanych danych, zmienna $sort3 która ma na celu ustawienie warunku sortowania przechwytuje odpowiednie dane, ale nawet jak ręcznie zamiast $sort3 wpisze na przykłąd ORDER BY data_kupna .

To też nici. 

Więc wydaje mi się że cudzysłowie są ok bo tak chyba zapytanie nie wykonałoby się wcale, no ale moge się myliś, dopieor się ucze smile.gif

Chyba coś mi się wydaje że mam za duży bałągan w kodzie musze siąść i spokojnie od nowa poukładać go bo tam troche za dużo tych zapytan jest smile.gif

Wydaje mi się że to chyba wina tego bedzie, tak to jest jak się na szybko coś 20 razy zmienia.
Ułoże go łądnie wiczorem i zobacze co z tego wyjdzie
trike
w jednym zapytaniu masz cos takiego:
  1. <?php
  2. ORDER BY  "'.$sort3.'" '.$sort4.' ;
  3. ?>

to chyba nie zadziala tak jak sobie wymysliles, zapytanie z ORDER BY z dwiema zmiennymi oddzielone spacja no i cudzyslowow i apostrofow tez sie nie trzymasz jak przy kazdej zmiennej
lukmar
w zminną $SORT4 wrzucam ASC lub DESC i na localu śmiga. Też miałem wątpliwość do tego ale po sprawdzeniu na localu jak działało to zostawiłem smile.gif

Ale próbowałem też bez tego i lipa.



zrobiłem jeszcze aby zapytanie do bazy wyświetlał na stronie i zapytanie jest według mnie ok, na localhoscie z tym samym kodem oraz tą samą bazą działa.




Bez jakiegokolwiek zapytania wygląda to nastęująco :




Stąd widać że zapytanie wykonuje się prawie "prawidłowo", gdyż zwraca szukane rekordy ale nie sortuje ich w wybrany sposób (na localhoscie sortuje smile.gif )
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.