Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] wyszukiwanie po rozmiarze pliku
Forum PHP.pl > Forum > Przedszkole
kosmic
otóż mam w swojej galeri wyszukiwarke, no i przeszukuje sobie baze zdjec po opisie zdjecia... to tak standardowo

ale chce zrobic, aby uzytkownik mógł przeszukac baze np. po rozmiarze (wielkosci) pliku... np szuka plików midzy 100kb a 200kb

czy wie ktos jak sie za to zabrac questionmark.gif jak to zrobic questionmark.gif

aha no i jeszcze wyszukiwanie po dacie dodania chce zrobic questionmark.gif wpisuje fraze i okreslam np. ze od 18.12.2007 do 20.12.2007 questionmark.gif

jak to zrobic questionmark.gif

czy porzebny jest jeszcze jakis kalendarz do tego czy co questionmark.gif (wolałbym nie) tylko jak to zrobic questionmark.gif

no i jeszcze po nazwie, ale z tym sobie poradze chyba....
Nattfarinn
Edit: Argh. Za szybko czytam i nie wystarczająco dokładnie. Wybacz. Dwie pierwsze linijki całkiem wypadły mi z głowy i nie sądziłem że już chodzi o bazę.

Najprościej to prowadzić baze danych zdjęć. Przechowujesz w niej informacje odnośnie każdego dodanego zdjęcia - wymiary, rozmiar, datę dodania i takie tam. Wtedy wyszukiwanie sprowadza sie do odpowiedniego sformułowania zapytania.

Ale to i tak sprowadza się do wykonania nic więcej jak odpowiednich zapytań:

np. SELECT * FROM gallery_images WHERE image_size BETWEEN 100 AND 200 i podobne.
kosmic
no to mam baze danych... i wniej trzymam info o zdjcie

a dokładnie: zdjecie,data_dodania,kategoria,album,opis

no i teraz mam wyszukiwanie, które przeszukuje jakies frazy w opisie, wiec dlatego napisałem ze z nazwą sobie poradze jakos bo to tak samo boedzie, tylko musze dodac cos co bedzie jakby plem wyboru...

no ale nie wiem jak o z data i z romiarem pliku zrobic questionmark.gif

z data własnie na chce tak abby podajac dwie daty szukało miedzy nimi

a rozmiar pliku to juz wogole nie wiem jak ugrysc
Nattfarinn
Rozbuduj swoją bazę danych o dodatkowe pole: rozmiar pliku. Wtedy nie będzie problemu.

Co do daty, to nigdy nie były moim ulubionym tematem i dobrze czy źle, ale stosuję czas Unixowy (liczba sekund które upłynęły od 1 stycznia 1970 roku). Jeśli przechowujesz datę również w tym formacie, to problem rozwiązuje się sam bo też formułujesz zapytanie na podstawie przedziału, a dane wejściowe traktujesz mktime() by uzyskać z dowolnego formatu daty czas unixowy.
kosmic
no baze rozbudowałem i przetestowałem i działa... to znaczy dodaje mi wielkosc pliku czyli ok....
co do zapytania to juz wspomniałes, wiec spoko, tylko jak to ugryśc z poziomu skryptu(formularza) czyli chodzi o to jak zrobic, zeby uzytkownik mógł wybrac przedział questionmark.gif

co mam zrobicpo prostu formularz z dwoma polami, do których wpisuje np: min: 100 max: 200 i pobioeram tedane, zapisuje do jakies zmiennej i wykonuje zapytanie questionmark.gif

czy jakas inna metoda questionmark.gif jak to ugryśc questionmark.gif

no a date mam dodawana do bazy poprzez funkcje NOW(), albo ewentualnie DATE('Y-M-D')
wiec format daty włąsnie tak wyglada
Nattfarinn
No to z datą Ci średnio pomogę (chociaż może wysilę mózgownicę i coś się poradzi), a co do formularza, to tak jak mówisz: dwa pola, minimalne i maksymalne. Do tego najlepiej dołożyć kilka warunków w stylu: wartość minimalna nie może być większa niż maksymalna, nie podanie minimalnej przyjmuje wartość 0, nie podanie maksymalnej albo przyjmie wartość nieosiągalną albo wykona zapytanie bez between za to z innym warunkiem. Ale to już kosmetyka. Dla poprawnego działania wystarczą dwa pola których wartość przekażesz do zapytania w odpowiednie miejsca.

Co do daty, to nie wiem czy to dobre rozwiązanie czy nie - ale możesz spróbować przerobić swoją bazę tak by pole daty przechowywało INT(10) i używać czasu Unixowego. Do tego tworzysz w formularz z odpowiednimi polami i korzystasz na wejściu z funkcji mktime() by przeliczyć format czasu na czas Unixowy. Z tymi danymi obchodzisz się praktycznie identycznie jak z rozmiarem plików.
kosmic
spoko, co do rozmiaru to powinienem sobie poradzic, zaraz bede kombinował, ale co do daty poczekam na innych, moze cos ktos inny wymysli bo to o czym Ty mowisz to dla mnie magia sad.gif bo dopiero od niedawna sie ucze

i nie wiem wogole jak to ugryść sad.gif
dadexix
możesz stworzyć pole typu DATE w bazie - ona się sama unixowym czasem wypelni podczas dodawania, a te które już są.. musisz wypełnić ręcznie lub na podstawie tego kiedy zmodyfikowano plik:)
kosmic
hmmm.. co do tych które teraz sa to nie ma problemu, bo to narazie uzupelniam tylko przykladowymi danymi aby tworzyc i testowac działanie...

czyli jakie mam to pole stworzyc questionmark.gif

data_dodania DATE NOT NULL;

tak questionmark.gif

teraz mam date tak:

data_dodania TIMESTAMP NOT NULL,

no i dodaje date poprzez NOW(); lub $data = DATE('Y-M-D');
dadexix
więc... mi się to kiełubasi we łbie:P mylą się te typy


jak masz timestamp to w atrybutach powinno być ON UPDATE CURRENT_TIMESTAMP a w domyślnych CURRENT_TIMESTAMP i wtedy gdy dodajesz coś to to pole zostawiasz puste(tak jak by to było auto_increment - id) i samo się wypełni datą/czasem
kosmic
no dobra wypóbuje, ale jak juz bedzie sie wypełniało datą to jak potem zrobic to wyszukiwanie po dacie questionmark.gif

jaki bedzie miala format data, jakie zapytanie i jak rozwiązać kwestie wyboru daty "od" do daty "do" questionmark.gif

to moj plik wyszukiwania zdjec, ktos mi powie jak dodac do tego wyszukiwanie po rozmiarze pliku questionmark.gif
mecze sie dzis cały dzien i lipa sad.gif

http://cpaste.com/4349

prosze abu ktos poswiecil troszke czasu, bo mnie to przerasta sad.gif
po prostu juz mi sie mieni w oczach a ciagle nie moge zrobic tego wyszukiwania

aha, dobrze by bylo jeszcze, abym wspomnial o tym jak wogole po wyciagnieciu rozmiaru z bazy, który jest chyba w bajtach, przerobic na kilko bajsty, tak abym w formularzu podawał wartosci w kb
dadexix
więc... najpierw ktow wybiera date np. od 01-01-2001 do 02-02-2002 potem wyciągasz rekordy z bazy(czkeajcie trzeba się doszkolić.... dobra szkolenie skończone)

zapytanie takie:
  1. SELECT * FROM `tabela` WHERE `dataczas` BETWEEN #01-01-2001# AND #02-02-2002#
i powinno Ci dać wszystkie z datą pomiędzy to a to:P takie zastosowanie jeśli używasz pola DATE a jeśli TIME
  1. SELECT * FROM `tabela` WHERE `dataczas` BETWEEN #01-01-2001 00:00:00# AND #02-02-2002 00:00:00#
itd. mam nadzieje że się przyda:D

inaczej mówiąc... robisz pola w formularzu i używasz ich
  1. <form action="skrypt.php" method="POST">
  2. <input type="text" name="dzienod">
  3. <input type="text" name="miechod">
  4. <input type="text" name="rokod">
  5. <input type="text" name="dziendo">
  6. <input type="text" name="miechdo">
  7. <input type="text" name="rokdo">

  1. <?php
  2. $zapytanie = "select * from `tabela` where `dataczas` BETWEEN #".$_POST['rokod']".-0".$_POST['miechod']".-".$_POST['dzienod']". 00:00:00# AND #".$_POST['rokdo']".-0".$_POST['miechdo']".-".$_POST['dziendo']". 00:00:00#";
  3. ?>
kosmic
no dobra, ale jak zrobic wybór daty przez potencjalnego odwiedzającego questionmark.gif

co ma wpisywac normalnie date??
i bedzie sie ciagle motal z poprawnym jej formatem questionmark.gif?

aha.. jak z tym rozmiarem pliku questionmark.gif
dadexix
dałem edita... możesz zrobić takiego forma
  1. <select name="f[date_ur_dzien]" style="">
  2. <option value="0">-</option>
  3. <option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18" selected="selected">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option> </select>
  4.  
  5. <select name="f[date_ur_miesiac]" style="">
  6. <option value="0">-</option>
  7. <option value="1">Styczeń</option>
  8. <option value="2">Luty</option>
  9. <option value="3">Marzec</option>
  10. <option value="4">Kwiecień</option>
  11.  
  12. <option value="5">Maj</option>
  13. <option value="6">Czerwiec</option>
  14. <option value="7">Lipiec</option>
  15. <option value="8">Sierpień</option>
  16. <option value="9">Wrzesień</option>
  17. <option value="10">Październik</option>
  18.  
  19. <option value="11">Listopad</option>
  20. <option value="12" selected="selected">Grudzień</option>
  21. </select>
  22. <select name="f[date_ur_rok]" style="">
  23. <option value="0">-</option>
  24. <option value="1945">1945</option><option value="1946">1946</option><option value="1947">1947</option><option value="1948">1948</option><option value="1949">1949</option><option value="1950">1950</option><option value="1951">1951</option><option value="1952">1952</option><option value="1953">1953</option><option value="1954">1954</option><option value="1955">1955</option><option value="1956">1956</option><option value="1957">1957</option><option value="1958">1958</option><option value="1959">1959</option><option value="1960">1960</option><option value="1961">1961</option><option value="1962">1962</option><option value="1963">1963</option><option value="1964">1964</option><option value="1965">1965</option><option value="1966">1966</option><option value="1967">1967</option><option value="1968">1968</option><option value="1969">1969</option><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option><option value="1975">1975</option><option value="1976">1976</option><option value="1977">1977</option><option value="1978">1978</option><option value="1979">1979</option><option value="1980">1980</option><option value="1981">1981</option><option value="1982">1982</option><option value="1983">1983</option><option value="1984">1984</option><option value="1985">1985</option><option value="1986">1986</option><option value="1987">1987</option><option value="1988">1988</option><option value="1989">1989</option><option value="1990">1990</option><option value="1991" selected="selected">1991</option><option value="1992">1992</option><option value="1993">1993</option><option value="1994">1994</option><option value="1995">1995</option> </select>


itd.(to ściągłem z fotka.pl haha.gif) kombinuj;]

co do rozmiaru...

filesize" title="Zobacz w manualu PHP" target="_manual pobierasz rozmiar pliku i zapisujesz do bazy... proste?
kosmic
no dobra.. cos bede jutro kombinował z data... a jesli chodzi o rozmiar pliku to wiem jak dodac do bazy itp.

tylko mam problem z poukładaniem i tego w calosc, a dokładniej jak dodac to zapytanie do swojego pliku...

tak aby to działało jak nalezy

link do pliku podałem wyrzej....

aha, no i zapytanie przede wszystkim:
takie mam i działa.....
$zapytanie = mysql_query("SELECT * FROM foto WHERE $kryt BETWEEN $min AND $max");

ale jak chce uwzglednic sortowanie i limit to juz nie stety niepoprawne.... i nie wiem dlaczego, bo chyba jest dobrze questionmark.gif
$zapytanie = mysql_query("SELECT * FROM foto WHERE $kryt BETWEEN $min AND $max ORDER BY $sort DESC LIMIT $page,$limit");

chodzi o to ze jak znajde jakies pliki powiedzmy miedzy 20kb a 100kb i jest ich powiedzmy 15 to chce by były ułozone po $sort, gdzie $sort wybieram poprzez <option></option>

no ale cos nie działa sad.gif
zrobilem po prostu specjalnie osobne zapytanie so do tego kryterium, które wyswietla wynik bo nie wiedziałem jak sobie porsciej z tym poradzic (jesli sie wogole da)
http://cpaste.com/4352

jesl mozna to uproscic tak aby działalo bede wdzieczny.... bo jak jeszcze dojdzie 3 całe zapytanie odnosnie daty to masakra ten plik bedzie....
Nattfarinn
Cytat(kosmic @ 21.12.2007, 00:48:30 ) *
ale jak chce uwzglednic sortowanie i limit to juz nie stety niepoprawne.... i nie wiem dlaczego, bo chyba jest dobrze?

$zapytanie = mysql_query("SELECT * FROM foto WHERE $kryt BETWEEN $min AND $max ORDER BY $sort DESC LIMIT $page,$limit");

Dopisz do zapytania or die(...);

Najlepiej byłby jakbyś zrobił:

  1. <?php
  2. $tresc_zapytania = "SELECT * FROM foto WHERE $kryt BETWEEN $min AND $max ORDER BY $sort DESC LI
    MIT $page,$limit"
    ;
  3. $zapytanie = mysql_query($tresc_zapytania) or die("<br />Zapytanie: $tresc_zapytania<br />".mysql_error());
  4. ?>

I wklej co się wyświetla (jeśli wyświetla się błąd), czyli treść zapytania i komunikat. No chyba, że nie działa w sensie: źle sortuje czy coś w tym rodzaju, ale musisz wtedy opisać problem bliżej.
dadexix
hm.. kombinujesz troche dziwnie... W Twoim zapytaniu nie widzę możliwości by user mógł wybrać np. rozmiar między x a y oraz czas między a i b... zrób sobie pola type=text potem daj cos takiego:

  1. <?php
  2. $zapytanie = "SELECT * FROM foto";
  3. if (isset($_POST['rokod'])) { //Nazwy możesz mieć inne więc sobie dostosuj
  4. $zapytanie .= "WHERE data BETWEEN '".$_POST['rokod']."-";
  5. }else{
  6. $zapytanie .= "WHERE data BETWEEN '1970-";
  7. }
  8. if (isset($_POST['miechod'])) {
  9. $zapytanie .= $_POST['miechod']."-";
  10. }else{
  11. $zapytanie .= "01-";
  12. }
  13. if (isset($_POST['dzienod'])) {
  14. $zapytanie .= $_POST['miechod'];
  15. }else{
  16. $zapytanie .= "01";
  17. }
  18. //jeśli użwasz pola timestamp zostaw lecz Jeśli używasz pola DATE to usuń od tąd
  19. $zapytanie .=" 00:00:00'";
  20. //do tąd
  21. if (isset($_POST['rokod'])) { //Nazwy możesz mieć inne więc sobie dostosuj
  22. $zapytanie .= " AND '".$_POST['rokdo']."-";
  23. }else{
  24. $zapytanie .= " AND '2069-";
  25. }
  26. if (isset($_POST['miechdo'])) {
  27. $zapytanie .= $_POST['miechod']."-";
  28. }else{
  29. $zapytanie .= "12-";
  30. }
  31. if (isset($_POST['dzienod'])) {
  32. $zapytanie .= $_POST['miechdo'];
  33. }else{
  34. $zapytanie .= "31";
  35. }
  36. //jeśli użwasz pola timestamp zostaw lecz Jeśli używasz pola DATE to usuń od tąd
  37. $zapytanie .=" 23:59:59";
  38. //do tąd
  39. ?>


do tąd doszłem.. teraz muszę wyczaić jak łączyć between bo jak narazie mi to nie wychjodzi haha.gif
kosmic
hmmm.... rozmiar pliku juz zrobiony, wiec to mozemy sobie odpuscic...
po prostu osobne zapytanie i tyle... no i wyszukiwanie po rozmiarze działa, wraz z sortowaniem...

no tylko teraz jeszcze ta data, mnie nurtuje....jeszcze sie za to nie zabierałem bo walczyłem ciagle z rozmiarem, a teraz mam problem z uploadem w IE.. ale to innym post...

a jesli chodzi o date to chyba zrobie tak jak zes napisał troszke wyzej, czyli z tym formularzem, co wybieram dzien, potem miesiac, potem rok i bede pobierał te dane z formularza i porównywał wartosc w bazzie...

bo do bazy dodaje poprzez DATE('Y-M-D') a pole mam TIMESTAMP wiec chyba powinno zadziałac questionmark.gif

potem po prostu zapytanie: ("SELECT * FROM foto WHERE data_dodania BETWEEN $y-$m-$d AND $y1-$m1-$d1")

no i oczywiscie zmienne $y, y$1, $m, $m1, $d, $d1 to dane pobrane z formularza

czy ma to sens i czy zadziała questionmark.gif
dadexix
Cytat
bo do bazy dodaje poprzez DATE('Y-M-D') a pole mam TIMESTAMP wiec chyba powinno zadziałac questionmark.gif
wszystko zadziała tylkonie to:P jak nie zależy Ci na godzinie/minucie dodania to użyj pola DATE i nie wypełniaj go tak... tylko podczas dodawania rekordów nawet nie dotykaj tego pola(jeśli dasz
  1. INSERT INTO `tabela`(`data`) VALUES ('')
to zapisze puste pole.. - 00-00-0000 - poprostu nie wywołuj tego pola;]
kosmic
no to ok... do bazy bede dodawał poprzez DATE('Y-m-d')

ale teraz jakie mam nadac atrybuty do pola "data_dodania" które mam w bazie... bo rozumiem ze nie TIMESTAMP

po prostu mam zrobic pole "data_dodania" DATE NOT NULL questionmark.gif

tak wlasnie zrobilem smile.gif

przechodze do robienia formularza....

o efektach napiszde... jak cos juz bede mial
dadexix
Cytat
no to ok... do bazy bede dodawał poprzez DATE('Y-m-d')
nieeeee po co sobie utrudniać?


masz np. tabele z polami id, kto, jak, kiedy i kiedy to jest data chcesz dodać rekord:
  1. INSERT INTO `tabela` (`id`,`kto`,`jak`) VALUES ('1','ja','normalnie')
a pole kiedy się samo wypelni datą... czaisz?
kosmic
ok, kumam czacze smile.gif

aha i jeszcze mam małe pytanko odnośnie wyszukiwania po rozmiarze...
a mianowicie mam takie zapytanie:

Kod
$zapytanie = mysql_query("SELECT * FROM foto WHERE $kryt BETWEEN $min AND $max ORDER BY $sort DESC LIMIT $limit");
$licz = mysql_num_rows($zapytanie);


no i jesli wpisze w formularz cos tam to wsio działa, jesli nic nie wpisze to komunikat ze trzeba wpisac dane, ale...

jak podam np. wartos minimalną "0" a max wieksza od zera to wywala blad zapytania questionmark.gif
dlaczego tak jest questionmark.gif

co min nie moze przyjmowac wartosci "0"... to troche dziwne mi sie wydaje questionmark.gif

bo np chce szukac pliki wieksz od "0" do "50" kb... no i to zapytanie mi zwroci blad

troszke bezsens??

albos nie tak z moim zapytaniem?
dadexix
hm... mi działa... a jak masz pola...? masz bazie bajty? kilobajty? czy co:D?
kosmic
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Program Files\VertrigoServ\www\galeria_zdj\gal_wyniki.php on line 118

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\VertrigoServ\www\galeria_zdj\gal_wyniki.php on line 119
Zdjecie: , rozmiar:

takie komunikaty dostaje jak podam kryteria min "0" max "50"

jak podam "1" do "50" - to działa normlanie....

zdj_rozmiar int(4) NULL

tak mam w bazie....
zapisuje do bazy w kb.... w taki sposób, ze pobiram $f = $_FILES['size'], a potem $f_size = $f/1024
no i $f_size dodaje do bazy...

czyli dodaje sie w kb

aha:
Kod
117 $zapytanie = mysql_query("SELECT * FROM foto WHERE $kryt BETWEEN $min AND $max ORDER BY $sort DESC LIMIT $limit");
118 $licz = mysql_num_rows($zapytanie);
119 while($wynik = mysql_fetch_array($zapytanie)) {
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.