Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >

Sedziwoj
Napisane: 18.08.2008, 15:16:34





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Cytat(.radex @ 16.08.2008, 21:56:30 ) *
Jak najbardziej można, ale moim zdaniem jest to troszeczkę bez sensu. Rozbijanie wszystkiego na siłę na oddzielne funkcje składowe (metody) jest co najmniej dziwne - ani to szybkie (więcej kodu), ani funkcjonalne, użyteczne.


Rozbicie ma sens, jeśli można wywołać jedną metodę, a drugą już nie, jeśli obie są wymagane na raz, to lepiej jest aby przyjmowały parę argumentów (ale też nie za dużo, jak więcej to znaczy, że inaczej trzeba to rozwiązać, np. przez obiekt z danymi). Więc to czy będzie dwie metody wywołane, czy jedna, zależy od tego jak dokładnie działają.
  Forum: Object-oriented programming · Podgląd postu: #506564 · Odpowiedzi: 20 · Wyświetleń: 4 472

Sedziwoj
Napisane: 6.08.2008, 09:14:25





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Nie wiem czy dobrze rozumiem pytanie, ale wydaje mi się że powinieneś poczytać o MVC (tematów jest do licha i ciut).
Ogólnie chyba chodzi Ci o wydzielenie pewnych warstw, wtedy w widoku nie powinno być pobieranie danych, dane powinny być do niego przekazane... ale poczytaj i powiedz czy o to Ci chodziło.
  Forum: Object-oriented programming · Podgląd postu: #501810 · Odpowiedzi: 4 · Wyświetleń: 1 474

Sedziwoj
Napisane: 4.08.2008, 16:36:02





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Cytat(Ziels @ 4.08.2008, 16:19:02 ) *
=========EDIT==========
Indexes:
"table_pkey" PRIMARY KEY, btree (id) CLUSTER


Czyli masz CLUSTER założony na index na id?
Jeśli tak, to trochę to bez sensu jest ;]

Co do count(*) to u mnie (normalny komp 3gb ram'u) zajmuje 11-12s (na 30milionach krotek o takim samym rodzaju jak Twoje)

Co do count, poczytaj:
http://www.varlena.com/GeneralBits/120.php
http://wiki.postgresql.org/wiki/Slow_Counting

może coś wybierzesz. Ale ogólnie jeśli w większości zapytań z count, ogranicza się do małego zbioru wyników, to nie będzie to takie obciążające.

A zapomniałem o tym, że PostgreSQL ma już optymalizację, i count(*) działa na innych zasadach niż w niektórych bazach, więc "trik" z 1 nie działa już.
  Forum: PostgreSQL · Podgląd postu: #501160 · Odpowiedzi: 10 · Wyświetleń: 3 086

Sedziwoj
Napisane: 4.08.2008, 15:37:59





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

indeks na te kolumny:
  1. CREATE INDEX test_no1_no2_index ON test USING btree ( no1, no2 );

Wyszukiwanie praktycznie nie widoczne.
  Forum: PostgreSQL · Podgląd postu: #501148 · Odpowiedzi: 10 · Wyświetleń: 3 086

Sedziwoj
Napisane: 6.08.2008, 08:49:40





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Jak zawsze jak czegoś szukam znów w manual'u to nie znajduję:]
A zamiast nazwy funkcji przekazujesz
  1. <?php
  2. array( $object, $method_name )
  3. ?>
  Forum: Object-oriented programming · Podgląd postu: #501795 · Odpowiedzi: 5 · Wyświetleń: 1 259

Sedziwoj
Napisane: 2.08.2008, 00:35:12





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Na początku tak się wydaje, że tylko ładniej, jak zaczniesz pojmować o co w tym chodzi, to zaczniesz rozumieć jaka jest w tym siła. Programowanie obiektowe, to nie jest jedna klasa, czy dwie, to wiele współpracujących ze sobą obiektów, ale aby to zrobić użytecznie, ładnie i elastycznie trzeba dużo czasu.
Moim zdaniem powinieneś zainwestować w książkę (choć nie powinno się brać tego co autor pisze jak prawdę, bo czasem mają głupie poglądy), poczytać kod jakiś prostych rzeczy napisanych obiektowo, czy chociażby je wykorzystać. Wtedy zrozumiesz jak to działa, bo samemu dochodząc bez przykładów, to zajmie wieki...
Spróbuj zintegrować swój projekt z Propel, poużywać go, na pewno wiele się dzięki temu nauczysz.

@marekc12

Uważaj na to co znajdziesz w internecie, bo czasem niby mądre osoby, a głupoty piszą.
Powinieneś zacząć od tego co ma ten obiekt robić, jaki ma zakres obowiązków, a potem dopiero wyszczególniać metody i właściwości.

Czyli np. ma łączyć się z bazą i umożliwiać wykonywanie kwerend na niej.

Co jest z interfejsu, wykonywanie kwerend, teraz pytanie jak to komplikować:
- można podzielić na dwa rodzaje, te co zwracają coś (SELECT) i te co nie zwracają (UPDATE/INSERT itp) więc można je rozdzielić, i wtedy np. jedna metoda zwraca tablice rekordów, a druga nic...
czy jakkolwiek, ale wszystkie mysql_*() powinny być w jednej klasie, a inne korzystać tylko z jej interfejsu.
  Forum: Object-oriented programming · Podgląd postu: #500279 · Odpowiedzi: 25 · Wyświetleń: 4 511

Sedziwoj
Napisane: 1.08.2008, 09:29:27





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Cytat(AxZx @ 1.08.2008, 01:40:16 ) *
ale czy konieczne jest trzymanie zbędnych wiadomości? jak obydwie strony ja usuną, to po co mi ona ma miejsce w bazie zajmować?


Takie rzeczy lepiej przechowywać, bo mogą się potem przydać w razie jakiś kłopotów.
Ludzie wysyłają dziwne wiadomości i lepiej je zawsze mieć.

EDIT: zresztą jak się nie mylę to tak robią większe portale społecznościowe, a na pewno mają jakiś cel w tym.
  Forum: Hydepark · Podgląd postu: #499944 · Odpowiedzi: 26 · Wyświetleń: 4 692

Sedziwoj
Napisane: 24.07.2008, 15:18:27





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Może nie za piękne... Ważne w deklaracji "SETOF "
  1. CREATE OR REPLACE FUNCTION f_get_category_path(category_id integer, shop_id integer)
  2. RETURNS SETOF p_category AS $BODY$
  3. DECLARE
  4. r p_category%ROWTYPE;
  5. aid integer;
  6. BEGIN IF category_id IS NULL THEN RETURN; END IF;
  7. aid := category_id;
  8. LOOP
  9. FOR r IN SELECT * FROM p_category WHERE id = aid
  10. LOOP
  11. RETURN NEXT r;
  12. END LOOP;
  13. EXIT WHEN NOT r.parent_id > 0; -- Nie wiem czy masz null, czy może błędnie 0 w tym polu jak nie ma rodzica.
  14. aid := r.parent_id;
  15. END LOOP;
  16. RETURN;
  17. END;
  18. $BODY$
  19. LANGUAGE 'plpgsql' VOLATILE;


EDIT: parę poprawek
EDIT2: poprawiam to co napisał phpion, aby był poprawny przykład, jakby ktoś sszukał
  Forum: PostgreSQL · Podgląd postu: #497233 · Odpowiedzi: 6 · Wyświetleń: 3 130

Sedziwoj
Napisane: 4.07.2008, 17:57:15





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

To co napisał l0ud
  1. <?php
  2. class Test {
  3.  
  4. public static function wykonaj(){
  5. //tresc funkcji
  6. }
  7.  
  8. }
  9.  
  10. class Test2 {
  11.  
  12. public function zadanie (){
  13. //tresc funkcji
  14. Test::wykonaj();
  15. }
  16.  
  17. }
  18. ?>

lub
  1. <?php
  2. class Test {
  3.  
  4. public function wykonaj(){
  5. //tresc funkcji
  6. }
  7.  
  8. }
  9.  
  10. class Test2 {
  11.  
  12. public function zadanie (){
  13. //tresc funkcji
  14. $Test = new Test();
  15. $Test->wykonaj();
  16. }
  17.  
  18. }
  19. ?>
  Forum: Object-oriented programming · Podgląd postu: #489591 · Odpowiedzi: 7 · Wyświetleń: 2 487

Sedziwoj
Napisane: 21.06.2008, 15:25:39





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Po pierwsze, po co używać funkcji, to jest bez sensu.
Po drugie, przecież pisze co jest nie tak,
Cytat
function concat(unknown, integer) does not exist
Ty masz concat(text, text). Jak już chcesz używać tej funkcji, to rzutuj to co przekazujesz na typ TEXT, (w ten sposób "concat(cos::TEXT, 'inne'::TEXT) ") i powinno wywoływać funkcję która już istnieje.

Pamiętaj że funkcje w PG, to nie w PHP, gdzie nie ma przeciążenia. (PHP nie rozróżnia funkcji pod względem przyjmowanych parametrów)
  Forum: PostgreSQL · Podgląd postu: #484583 · Odpowiedzi: 2 · Wyświetleń: 1 855

Sedziwoj
Napisane: 19.06.2008, 10:53:50





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Tam gdzie masz zainstalowany PG masz folder "data" czy w nim masz "pg_tblspc"?
Bo może po prostu coś się stało z plikami danych, a tych podczas reinstalacji pg nie rusza.
  Forum: PostgreSQL · Podgląd postu: #483868 · Odpowiedzi: 6 · Wyświetleń: 2 540

Sedziwoj
Napisane: 9.06.2008, 12:14:10





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Prawdopodobnie masz ustawione inne domyślne kodowanie bazy, zmień je na takie jak masz na starej bazie.

@ShadowD
Tu wynika że korzysta z kodowania latin1_swedish_ci, a mimo że jest nie poprawne, to nie powinien zmieniać, bo jest taka zasada, jak program umieści dane w bazie i je odczyta, to niezależnie jakie jest w niej kodowanie dostanie to samo, czyli ze znakami. Tylko wtedy programy które poprawnie to rozpoznają wyświetlają krzaczki.
  Forum: MySQL · Podgląd postu: #480338 · Odpowiedzi: 4 · Wyświetleń: 1 362

Sedziwoj
Napisane: 9.06.2008, 09:13:50





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Możesz wybrać grupę np. 20 rekordów, wybierając przedział losowo (jedynie początek wystarczy losowo wybrać), a z tej grupy po rand() te 5, co prawda to spowoduje że będą występować tylko blisko siebie dane, ale da to złudzenie losowości, jeszcze można co najwyżej wykorzystać indeksowane kolumny do różnych sortowań.
  Forum: MySQL · Podgląd postu: #480291 · Odpowiedzi: 3 · Wyświetleń: 1 102

Sedziwoj
Napisane: 3.06.2008, 12:49:45





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

@Gecco
Nie będę pisał czegoś co już jest napisane
http://propel.phpdb.org/trac/wiki/Users/Do...n/1.2/BasicCRUD
Tu masz przykład wykorzystania tego w ORM, tylko że on daje o wiele więcej.
Mała kopia z powyższego linku:
  1. <?php
  2. // 1) Fetch an object by primary key
  3.  
  4. $myBook = BookPeer::retrieveByPK(1);
  5.  
  6. // 2) update the values & save() it.
  7.  
  8. $myBook ->setTitle("War & Peace");
  9. $myBook->save();
  10. ?>

BookPeer to właśnie DAO, metoda retrieveByPK() pobiera jeden wiersz o zadanym kluczu głównym, oczywiście zwraca go jako obiekt AR czyli Book, metody set*() ustawiają wartości pól, get*() pobierają, save() zapisuje aktualny stan obiektu do bazy. W tym przypadku save() wywołuje update, ale jak stworzysz obiekt Book i nadasz mu wartości i dasz save() to wtedy wykona insert.
Co do pobierania wielu to masz metodę w BookPeer::doSelect( Criteria $c ), która zwraca array obiektów (choć lepiej było aby zwracało iterator, ale może w nowej wersji 1.3 to zmienili) Book, jak nie ma spełniających Criteria to zwraca pustą tablicę.
Co do Criteria, czyli warunków to znów kopię dam:
  1. <?php
  2. $c = new Criteria();
  3. $cton1 = $c->getNewCriterion(AuthorPeer::FIRST_NAME, "Leo");
  4. $cton2 = $c->getNewCriterion(AuthorPeer::LAST_NAME, array("Tolstoy", "Dostoevsky", "Bakhtin"), Criteria::IN);
  5.  
  6. // combine them
  7. $cton1->addOr($cton2);
  8.  
  9. // add to Criteria
  10. $c->add($cton1);
  11. ?>

co odpowiada
  1. SELECT ... FROM author WHERE (author.FIRST_NAME = 'Leo' OR author.LAST_NAME IN ('Tolstoy', 'Dostoevsky', 'Bakhtin'));

i taki obiekt $c przekazujesz do BookPeer::doSelect() i ono wybiera te rekordy co spełniają te kryteria.
  Forum: Object-oriented programming · Podgląd postu: #478281 · Odpowiedzi: 10 · Wyświetleń: 2 929

Sedziwoj
Napisane: 23.05.2008, 15:37:26





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

A mi brakuje, aby coś spróbować, bo nie zawsze pamięta się wszystkich rzeczy, nie lubię być impreterem ;]
  1. count(branza_2.id_dostawca) AS ilosc

może tak
  Forum: PostgreSQL · Podgląd postu: #474504 · Odpowiedzi: 6 · Wyświetleń: 2 138

Sedziwoj
Napisane: 23.05.2008, 12:56:59





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Spróbuj tak:
  1. SELECT
  2. nadbranza.id_nadbranza,
  3. nadbranza.nazwa,
  4. count(nadbranza.id_nadbranza) AS ilosc
  5. FROM nadbranza LEST JOIN ( SELECT DISTINCT b.id_nadbranza,
  6. d.id_dostawca
  7. FROM branza AS b
  8. LEFT JOIN dostawca_branza AS db ON db.id_branza = b.id_branza
  9. LEFT JOIN (SELECT * FROM dostawca WHERE id_dostawca>0) AS d ON d.id_dostawca = db.id_dostawca
  10. ) AS branza_2 ON branza_2.id_nadbranza=nadbranza.id_nadbranza
  11. GROUP BY
  12. nadbranza.id_nadbranza,
  13. nadbranza.nazwa


(to automatyczne formatowanie chyba się nie nadaje do bardziej złożonych zapytań)
  Forum: PostgreSQL · Podgląd postu: #474461 · Odpowiedzi: 6 · Wyświetleń: 2 138

Sedziwoj
Napisane: 14.05.2008, 08:55:36





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

@netmare
Zaczynasz od czegoś, od czego nie powinieneś, bo klasa do obsługi sesji jest specyficzna, tak jak napisał ayeo lepiej od razu użyć session_set_save_handler(), bo to przysłania sposób działania, a nadal możesz użyć klasy do obsługi.
Jakbym zaczął jednak od innego problemu, bo na początek zazwyczaj lepiej zacząć od prostych rzeczy.
  Forum: Object-oriented programming · Podgląd postu: #471131 · Odpowiedzi: 8 · Wyświetleń: 2 128

Sedziwoj
Napisane: 6.05.2008, 11:14:13





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Można Crona, można trigger ale to przy małym obciążeniu, można też to i to, czyli triggery które robią z grubsza, wiedzą ile było głosów i jak jest średnia więc mogą aktualizować na tych informacjach, z małą dokładnością, ale wynik miej więcej będzie od razu widoczny, a Cron potem zlicz dokładniej.
(bo mi nic nie wiadomo o tym aby odpalały się jakieś rzeczy automatycznie co jakiś czas na bazie)
  Forum: Bazy danych · Podgląd postu: #468473 · Odpowiedzi: 5 · Wyświetleń: 1 743

Sedziwoj
Napisane: 1.05.2008, 21:57:40





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Wiesz, i tak będziesz miał je jakiś identyfikowane, przecież masz je w wersjach językowych, więc jakoś nie widzę różnicy, czy zapisuje się wiadomość, czy tylko jej identyfikator, a przy wyświetlaniu jest dopiero na prawdę pobierana... (wyświetlani/wysyłanie czy cokolwiek innego)
  Forum: PHP · Podgląd postu: #467110 · Odpowiedzi: 13 · Wyświetleń: 2 131

Sedziwoj
Napisane: 17.04.2008, 23:23:50





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Instancję klasy A możesz przekazywać do tych dwóch pozostałych obiektów, a i tak obiekt klasy A będzie jeden.
  1. <?php
  2. class B {
  3.  
  4.  protected $A;
  5.  public function setClassA( A $A ){
  6. $this->A = $A;
  7.  }
  8.  
  9. }
  10. $A = new A();
  11. $B = new B();
  12. $B->setClassA( $A);
  13. $C = new C();
  14. $C->setClassA( $A);
  15. ?>


Dziedziczenie wykorzystujemy kiedy jest logiczne, a nie kiedy jest nam wygodnie.
  Forum: Object-oriented programming · Podgląd postu: #464124 · Odpowiedzi: 11 · Wyświetleń: 3 198

Sedziwoj
Napisane: 9.04.2008, 14:18:45





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Cytat(l0ud @ 9.04.2008, 15:11:04 ) *


To nie do końca to samo, na pewno to z SimpleXML nie jest "Fluent Interfaces" bo tyczy się ono jednego obiektu a SimpleXML zwraca inny obiekt do którego się odnosimy...
Ale ogólnie chodzi o zwracanie obiektu do którego mamy od razu dostęp. Czy to będzie return $this, czy return new CosTam(), to nie jest ważne.
  Forum: Object-oriented programming · Podgląd postu: #462536 · Odpowiedzi: 3 · Wyświetleń: 1 952

Sedziwoj
Napisane: 9.04.2008, 07:26:34





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

http://xdebug.org/
To jest chyba właściwie jedyny, do tego trzeba program do interpretacji tych wygenerowanych plików, ale link do niego masz w dokumentacji.
Jeśli chcesz się pobawić w debugging to ładny opis jak skonfigurować i jak działa masz na blogu Ludvik'a http://ludvik.pl/2007/09/11/eclipse-pdt-de...-z-xdebug-cz-1/
  Forum: PHP · Podgląd postu: #462401 · Odpowiedzi: 3 · Wyświetleń: 1 076

Sedziwoj
Napisane: 8.04.2008, 11:25:33





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

W tak zdefiniowanym przez Ciebie schemacie, tak.
Ja bym co prawda inaczej to zrobił, abym mógł w przyszłości dodać dowolną sondę... ale nie tego tyczyło się pytanie.
  Forum: Bazy danych · Podgląd postu: #462091 · Odpowiedzi: 4 · Wyświetleń: 1 495

Sedziwoj
Napisane: 5.04.2008, 22:33:38





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Po pierwsze oduczyć się tych głupot z MySQL, jak się grupuje, to się grupuje.
  1. SELECT
  2. a.*,
  3. CASE
  4. WHEN art_vote.votes IS NULL
  5. THEN 0
  6. ELSE art_vote.votes
  7. END AS ratings_count
  8. FROM Articles AS a
  9. LEFT JOIN ( SELECT article_id,
  10. count(*) AS votes
  11. FROM ( SELECT
  12. article_id
  13. FROM Ratings GROUP BY
  14. user_id,
  15. article_id
  16. ) AS vote
  17. GROUP BY
  18. article_id
  19. ) art_vote ON a.id = art_vote.article_id


Nie mówię, że to jest najlepsze, ale działa.
  Forum: PostgreSQL · Podgląd postu: #461283 · Odpowiedzi: 1 · Wyświetleń: 1 351

Sedziwoj
Napisane: 6.04.2008, 21:42:38





Grupa: Zarejestrowani
Postów: 793
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----

Czytaj dokumentację, choć przyznam kiepska.
Cytat
The || operator is "concatenate" - it joins together the two strings of its operands.


  1. LIKE '%' || tytul_filmu || '%'

To powinno pójść na SQLite, jak na wielu innych bazach danych, bo to jest zwyczajowy operator łączenia.
  Forum: Bazy danych · Podgląd postu: #461570 · Odpowiedzi: 4 · Wyświetleń: 2 504

2 Stron V   1 2 >

New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 13:53