Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Stronicowanie z warunkiem
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Witam. Borykam się z problemem stronicowania. Chcę dodać warunek do zapytania i wciąż mam błąd:
  1. $start = ($s-1)*$na_strone;
  2. $wynik = mysql_query("SELECT SQL_CALC_FOUND_ROWS *
  3. FROM tutoriale
  4. WHERE tut_stan = 1
  5. LEFT JOIN kategorie
  6. ON (kat_id = tut_kat_id)
  7. ORDER BY tut_id DESC
  8. LIMIT $start, $na_strone");
  9. $rekordow = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);
  10. $stron = ceil($rekordow/$na_strone);

Chciałbym dodać warunek wykluczający wyświetlanie artykułów, gdzie:
  1. WHERE tut_stan = 1

Co nie wymodzę, mam błąd składni zapytania. Chciałbym tez pozbyć się SQL_CALC_FOUND_ROWS * na rzecz COUNT(*)...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Uuuu, ale konkretów. To może i ja pokomentuję:
  1. CREATE TABLE `tutoriale` (
  2. `tut_id` int UNSIGNED NOT NULL AUTO_INCREMENT, // fakt, jakoś mi się 11 dopisało, sam nie wiem skąd :|
  3. `tut_nr` smallint(4) UNSIGNED ZEROFILL NOT NULL, // chcę mieć liczbę 4-cyfrową
  4. `tut_tytul` varchar(255) DEFAULT NULL,
  5. `tut_data` timestamp DEFAULT NULL, // miałem int(10), bo mam jakieś problemy z przetwarzaniem daty
  6. `tut_autor` text , //CZEMU TU MASZ TEXT ? - tu ma BYć nick, imię autora artykułu
  7. `tut_zrodlo` text //CZEMU TU MASZ TEXT ?, - tu ma BYć adres (www) do źródła
  8. `tut_tresc` longtext ,
  9. `tut_kat_id` int UNSIGNED DEFAULT NULL, // tu takie same jaja, nie wiem skąd TO 11...
  10. `tut_stan` tinyint NOT NULL DEFAULT 0, // poprawię - mam rozumieć, że kod php pozostanie ten sam?
  11. `tut_obraz` varchar(20) NOT NULL, // link do obrazka... (img/00/00/obrazek.jpg)
  12. `tut_psd` tinyint NOT NULL DEFAULT 0,
  13. `tut_notatki` text ,
  14. `tut_moderator` text NOT NULL, //CZEMU TU MASZ TEXT ? - hmmm, TO ma BYć nick dodającego
  15. `tut_ktoed` smallint UNSIGNED NOT NULL, // ID edytującego
  16. `tut_czased` timestamp UNSIGNED NOT NULL, // tu zapisuję czas, w jakim można edytować artykuł (czas z przyszłości)
  17. `tut_czytano` mediumint UNSIGNED DEFAULT 0, //CZEMU TU MASZ mediumint ? Nie powinny byc tinyint? nie wiem co tam bedziesz trzymal. - tu ma BYć licznik, ile razy czytano dany artykuł
  18. `tut_zezw_koment` tinyint NOT NULL DEFAULT 0, // czy zezwolić na komentowanie
  19. `tut_zezw_ocenic` tinyint NOT NULL DEFAULT 0,// czy zezwolić na ocenianie
  20. PRIMARY KEY (`tut_id`)
  21. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


- jak coś jest datą, to pole ma być typu datowego (DATE,TIME,DATETIME, TIMESTAMP) a nie int
Jak już pisałem, miałem problemy w przetwarzaniem daty i teraz zapisuję to po prostu tak:
  1. $data = time();

To samo z czasem edycji:
  1. if ($czased == '') {
  2. $czased = time() + 172800;
  3. } else {
  4. $czased = $_POST['czased'];
  5. }

A potem:
  1. '.showdate('Y m.j', $dane['tut_data']).'

Funkcja (szczerze mówiąc, "kwietnia" przekłamuje:
  1. // Format polskiej daty i godziny
  2. function showdate($format,$timestamp=null){
  3. $to_convert = array(
  4. 'l'=>array('dat'=>'N','str'=>array('Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota','Niedziela')),
  5. 'F'=>array('dat'=>'n','str'=>array('styczeń','luty','marzec','kwiecień','maj','czerwiec','lipiec','sierpień','wrzesień','październik','listopad','grudzień')),
  6. 'f'=>array('dat'=>'n','str'=>array('stycznia','lutego','marca','kwietnia','maja','czerwca','lipca','sierpnia','września','października','listopada','grudnia'))
  7. );
  8. if ($pieces = split('[:/.\ \-]', $format)){
  9. if ($timestamp === null) { $timestamp = time(); }
  10. foreach ($pieces as $datepart){
  11. if (array_key_exists($datepart,$to_convert)){
  12. $replace[] = $to_convert[$datepart]['str'][(date($to_convert[$datepart]['dat'],$timestamp)-1)];
  13. }else{
  14. $replace[] = date($datepart,$timestamp);
  15. }
  16. }
  17. $result = str_replace($pieces,$replace,$format);
  18. return $result;
  19. }
  20. }

- jak liczba nie jest ZEROFILL to podawanie np. int(11) niczemu nie służy. samo int wystarczy
No to łapię...

- jak coś jest auto_increment, i to coś jest też unikalne, to znaczy ze to jest klucz głowny. rób więc z tego klucz główny
Tego nie łapię - myślałem, że właśnie to wykorzystuję...

- jak coś ma przyjmowac małe liczby, to rób z tego tinyint
Czyli na ID kategorii lub ID_kto_edytuje się nada - ja miałem smallint...

- jak coś jest liczbą to masz tam wkładać liczbę a nie tekst.
czyli nie '0', '1' ...
a: 0, 1 ...


- nie rób enum z wartosci liczbowych. to sie mija z celem. Jak chcesz robic to rób z wartości tekstowych, wtedy ma to sens.
W sumie, mógłbym się pokusić o trzymanie w ENUM, wystarczyło by zmienić co nieco w formularzu, bo teraz mam:
  1. <input type="radio" name="stan" value="0" checked="checked" />
  2. <input type="radio" name="stan" value="1" />


- mogłbys się pokusic o typ INNOD_DB zamiast MyIsam - móglbys robić wówczas relacje. No ale to narazie zostawmy
Tak, żart się udał (IMG:style_emoticons/default/winksmiley.jpg)

- twórz indexy na polach, które będą brały udział np. w wyszukiwaniach
Tematu wogóle nie łapię, mam co prawda wyszukiwarkę spłodzoną, ale wzorowałem się na php-fusion...

- jesli pole będzie miało tylko dodatnie liczby, dodawaj UNSIGNED
To już wiedziałem, ale mogłem przeoczyć.
I na koniec:

ps: czyzbyś był starszy ode mnie? eee, nie (IMG:style_emoticons/default/winksmiley.jpg)
Wiek: Kobiet i nospora o wiek się nie pyta (IMG:style_emoticons/default/winksmiley.jpg) Ale swoje lata już mam.
(IMG:style_emoticons/default/co_jest.gif) Serio??
Go to the top of the page
+Quote Post

Posty w temacie
- Kshyhoo   [PHP] Stronicowanie z warunkiem   13.06.2010, 13:12:06
- - mariuszli   Zobacz w którym miejscu masz WHERE, a w którym pow...   13.06.2010, 13:34:11
- - Kshyhoo   Powinno być tak: [PHP] pobierz, plaintext $start ...   13.06.2010, 13:44:04
- - mariuszli   Jaką masz strukturę tych tabel?   13.06.2010, 17:13:41
- - Kshyhoo   [SQL] pobierz, plaintext CREATE TABLE `tutoriale` ...   13.06.2010, 17:43:25
- - mariuszli   Tylko, że w zapytaniu są używane dwie tabele, a da...   13.06.2010, 18:38:54
- - Kshyhoo   Druga, to tylko kategorie: [SQL] pobierz, plaintex...   13.06.2010, 18:47:53
- - nospor   CytatGdy wpiszę warunek WHERE tut_stan=1, wyświetl...   13.06.2010, 20:25:39
- - mariuszli   Jednak możliwe. [SQL] pobierz, plaintext `tut_stan...   13.06.2010, 20:33:06
- - nospor   @mariuszli w tym co piszesz być może i jest racja....   13.06.2010, 20:35:18
|- - Kshyhoo   Cytat(nospor @ 13.06.2010, 21:35:18 )...   13.06.2010, 22:33:42
- - nospor   CytatTo jest tak, jednemu podoba się żona innemu t...   14.06.2010, 06:49:10
- - Kshyhoo   Pisząc to porównanie, nie miałem na myśli siebie.....   14.06.2010, 15:52:33
- - nospor   CytatZresztą zobacz sobie 7 post na w/w stronie, j...   14.06.2010, 20:08:07
- - Kshyhoo   Ja też bym się nie przejmował. Internet to takie m...   14.06.2010, 20:26:23
- - nospor   dobra, jutro uporządkuję ci tę tabelę trochę. tera...   15.06.2010, 06:32:23
- - Kshyhoo   Uuuu, ale konkretów. To może i ja pokomentuję: [SQ...   15.06.2010, 20:06:29
- - nospor   CytatJak już pisałem, miałem problemy w przetwarza...   16.06.2010, 06:51:08
- - Kshyhoo   Mój wiek, to żadna tajemnica - 43... mam w profilu...   16.06.2010, 18:48:32
- - nospor   CytatMój wiek, to żadna tajemnica - 43... mam w pr...   16.06.2010, 19:59:39


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 11:05