Wypowiedzi
-
I jak zwykle zgłoszę się do was z problemem, bo z doświadczenia wiem, że tu najszybciej uzyskam odpowiedź :D
Problem:
http://forum.php.pl/Przerzucanie_bazy_danych_t108666.html
Dzięki za odpowiedź :D -
Dzięki wszystkim za "cenne uwagi". Problemem było ostatnie DELIMITER ;, po usunięciu tej linijki wsio śmiga jak powinno... Jak człowiek sam sobie nie poradzi to inni też mu nie pomogą...
Swoją droga, poprawiłem błędy, jest na sesjach i te pierdoły... -
O w morde, duzo tego tydzień googlowania jak dla zwykłego bankiera hobbyste :D
- Autoincrement na Primary Key
To powiedzmy - stosuję- Typy indexów
Gdzie i jak to stosować?- Char(x) z opcja binary
Hem, jak wyżej?- LAST_INSERT_ID()
Brzmi fajnie i mam nadzieję że ziała tak jak sobie tłumaczę, że działa, to usunie mój problem z wysyłaniem w getcie pewnych info, o sesjach czytałem i wiem jak ich stosować, ale mówię, użytek własny nie wymaga pewnych restrykcyjnych zabezpieczeń (chociaż warto na to zwrócić uwagę)- SELECT SQL_CALC_FOUND_ROWS...LIMIT X & SELECT FOUND_ROWS()
A człowiek kiedyś myślał, że samo SELECT INSERT UPDATE wystarcza, żeby bawić się MySQLem- Full-text
Nie kumam w jakim sensie full-text- Transakcje z poziomami izolacji
Matko masa enigmatycznych stwierdzeń (jak na razie dla mnie)
- Foreign keys i storage engine InnoDB- Left join, join, outer join, inner join... cross join. ;] którego nie ma w mySQL.
Ech coś się kiedyś czytalo na ten temat, a że outer join jakoś zapadł mi w pamięci to z tego zawsze korzystałem bezwiednie (robiło co miało więc po co drążyć głębiej, ale po co są fora :P)Paweł Ługowski edytował(a) ten post dnia 29.10.08 o godzinie 22:30 -
No dobra, wybaczcie, nie jestem adminem baz danych, ani webmasterem freelancerem. Robię swoje małe programiki do uzytku własnego i najważniejsze dla mnie jest robienie ich jak najlepiej potrafię ucząc się przy tym cały czas, więc jakby ktos z łaski swojej pomógł mi w moim konkretnym problemie, bez zbednych komentarzy bedę wdzięczny!
Dziękuję :D -
Rafał Wardas:
Pierwsza rzecz o którą nie dbasz to SQL Injection ;] pogrzebać w twojej bazie by dostać dane od np. innych użytkowników to banał na w.w. przykładzie ;)
W bazie nie ma żadnych danych userów jedynie dane wysyłek, które de facto nie są mocno istotne dla osób trzecich, bo adresat i nadawca sa jedynie nazwami tych osob...
Po drugie, zawile opisujesz swój problem i po paru zdaniach odpuściłem, ale że jest to przypadek w którym wypełniasz formularz z danymi użytkownika a nastęnie dla w.w. użytkownika dodajesz rekordy z wysyłką to nie za bardzo mi się to podoba ;)
Było rano, zmęczony byłem i jak widzę faktycznie nie skumałeś o co mi chodzi :P
Parę uwag:
- INSERT `idlist` ( `id_id` ) VALUES ( '".$_GET['ch']."' );
Za to nie jedna osoba by cię zwolniła ;] takie rzeczy się w sesji trzyma.
Nie kumasz jednak nadal :D Z resztą wyżej napisałem po co taki myk.
- Co chcesz osiągnąć stosując złączenie zewnętrzne?
A co za różnica outer join czy join, też działą.
- Jak chcesz się pod PHP odwołać do Stored procedure w mySQL to ci się to zwyczajnie nie uda :) ponieważ API mysql_XXX ( php4 głównie ) nie jest do tego przystosowane, klasa pod OO php5 mysqli co innego ;) ale i tak trzeba użyć paru sztuczek by tego dokonać i skorzystać z metody, która potrafi przetworzyć wiele result set'ów na wyjściu.
Korzystam z mysql 5 soś tam, tylko na localhoscie mam 4, ale to co innego...
- Słyszałeś o LAST_INSERT_ID() / PRIMARY KEY z własnością AUTOINCREMENT? Jak widzę INSERT INTO foo(id) VALUES( $_GET[ ] ) to mam wątpliwości :)
Fakt, nie słyszałem, możesz rozwinąć temat?
Kamil: Różnic jest sporo ~5.0.6 czy jakoś tak dopiero ma sens :) obecnie pracuję 5.0.26 ;) wspiera SP i EVENTS
Bartosz:
Czy nie zapomniałeś o handlerach dla błędu ? ;]
np:
...
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SET p_sqlcode=1329;
SET p_status_message='No record found';
END;
^ Też możesz rozwinąć temat
BTW: MySQL ma dość ciekawą rzecz :
Paweł Ługowski edytował(a) ten post dnia 29.10.08 o godzinie 09:27
INSERT INTO foo(id, param ) VALUES ( @a, @b )
ON DUPLICATE KEY UPDATE param=VALUES(param); -
No dobra, ale na serwerku procedury śmigały i tam testowałem to chwile działało, a teraz? Hem...
-
localhost: Wersja serwera: 4.0.26
serwerek: Wersja serwera: 5.0.60-log
Zapytania typu INSERT SELECT i wsio normalne wchodzi
wysłanie zapytania CALL check_list wywala mi error, że nie ma takiej procedury (ale to wiem, bo nie moge jej w końcu dodać) niemniej jednak tez przechodzi to dość szybko i mam odpowiedź o braku procedury w 0.01s...
Jakieś sugestie? -
No na localhoscie to mam i na zewnętrznym serwerze do którego niestety nie mam dostępu,a przeciez nie chodzi o to, żeby wydużać time execution, prawda - jak mówie wcześniej chodziło bezproblemowo i zapytanie wykonywało się w około 1s :/
-
Z angola idzie mi całkiem nieźle i wiem co oznacza to stwierdzenie, ale liczyłem na podpowiedzi czemu to wywala się.
Moja procedura: http://forum.php.pl/Problem_z_dodaniem_procedury_t1058...
Pytanie teraz. Dlaczego wywala mi owy błąd nawet przy próbie dodania procedury
CREATE PROCEDURE foo(IN id INT)
BEGIN
DECLARE d INT;
SELECT * FROM listy WHERE id = id INTO d;
END
od razu pisze ze ten przyklad napisalem z palca i moze zawierac male bledy, ale nie o to chodzi... -
Kurde nie wiem co się stało, czy to wina przeglądarki, czy połaczenia. W pracy na IE6 bez problemu dodałem Procedurke do mysqla, a teraz na FF i IE7 wywala mi w phpmyadmin:
Fatal error: Maximum execution time of 300 seconds exceeded in /var/www/localhost/htdocs/phpmyadmin/libraries/import/sql.php on line 105
O co tu chodzi? -
Czyli procedure moge utworzyć jedynie w konsoli phpmyadmin i nie moge wysłac jej do db poprzez mysql_query, a function tak?
-
Dzięki stary,
Twój manual jest o wiele łatwiejszy do zakumania niż ten co mi podesłałeś. Tam duzo pisania a przykłady jakieś dziwne. A to póki co zaczytuje się do MySQLa. Mam tylko pytanie. Rozumiem, że procedury zaczytują się do Bazy danych. Mam jakąś możliwość podglądania jakie procedury są już zaczytane? (żeby np, za jakiś czas je pokasować? -
Bartosz, a mógłbyś trochę pomóc, przyznam, że pierwszy raz słysze o tych procedurach, byłbyś na tyle dobrodusznym człowiekiem co pomoże sklecić odpowiednie zapytanie?
rozumiem, że CREATE PROCEDURE jest odpowiednikiem function w php i ma za zadanie utworzenie jakiejś "procedury", która po kolei wykonuje określone zadania.
Tylko jak to wykorzystać w praktyce przy w moim problemie?
Tak jak pisałem założenia są jasne tylko po kolei je wykonywać trzeba...
A i to wysyła się normalnie poleceniem mysql_query? Czy jakoś inaczej trzeba zapodać do db? Bo nie mam dostępu do shella serwera :/Paweł Ługowski edytował(a) ten post dnia 27.10.08 o godzinie 18:17 -
Problem opisałem tu: http://forum.php.pl/IF_EXISTS__THEN__ELSE__END_Ewentua...
Ale niestety nikt na razie nie był w stanie mi odpowiedzieć, albo po prostu mało osób tym się interesuje.
Na samym końcu wyjaśniłem o co dokładnie mi chodzi, wiem, że można to łatwo zrobić kilkoma zapytaniami mysql_query, ale nie o to mi chodzi.
Pozdrawiam, i dzięki za pomoc :D -
Buehehehe... Rodzinny wątek się zrobił!
A coś innego? -
Witam, jestem w trakcie organizowania spotkania klasowego podstawówki i mam problem z jakąś miejscówą. Co polecacie, żeby dobrze sie bawić, potańczyć, popić i pogadać. Klasa liczyła ok 30 osób, ale liczę, że niektórzy poprzychodzą z osobami towarzyszącymi, czyli potrzebowałbym lokal na ok 50-60 osób.
Także jeszcze raz, jaki klub, jak mniej więcej ma się rezerwacja + cena za to.
Na terenie Gdyni lub Sopotu najlepiej :D -
Grzegorz G.:
select z.nazwa_sałatki
from sałatki z
left outer join lodówka l on z.składnik = l.składnik
group by z.nazwa_sałatki
having sum(case when l.składnik is null then 1 else 0 end) = 0select z.nazwa_sałatki
from sałatki z
cross join lodówka l
where ',' || z.przepis || ',' like '%,' || l.składnik || ',%'
group by z.nazwa_sałatki
having count(*) = max(length(replace(z.przepis, ',', ''))) + 1
Cholera przerobiłem już wszystkie tabele tak, aby były nabardziej znormalizowane ale jakoś Twoje przykłądy nie chcą działać. Mógłbyś napisać je tak, żeby współgrały z nazwami tabel jakie używam?
czyli.
Mam 3 tabelki:
#1 salatki [s_id | s_name]
#2 components [c_id | c_name]
#3 xref [id_sal | id_comp]
I dane oczywiście wywalone w tablicy, ale tak jak Bartosz pisał są zimplodowane > implode(",",$_POST['co_mam']) do postaci po przecinkach... A i w tej tablicy wysyłam tylko id poszczególnych składników, mniejsza ilość danych do wysłania :D
Kurcze tak to jest jak cały czas używało się tylko najprostszych zapytań do mysqla, a potem trzeba nadrabiać zaległości :DPaweł Ługowski edytował(a) ten post dnia 29.08.08 o godzinie 15:27 -
Na tym polegaja relacyjne bazy danych, tak z grubsza :P
No racja <debil>
Ok, póki co informacje tu udzielone wystarczają mi... Jakby co to zapukam ponownie o pomoc. Wielgachne dzięki towarzysze! -
ok, a teraz co gdyby (o czyms mi sie przypomnialo) do skladnikow dodac jeszcze jego typ... jakby to opisac... O typ np.
id | skladnik | typ
1 | wołowina | mieso
2 | marchew | warzywo
3 | jablko | owoc
stworzyc podobna baze do xref?
O i jeszcze wazna rzecz. Ilosc skladnika. Czy w xrefie moge utworzyć sobie kolejną kolumne nazwać ilosc i tam wpisywać np. 1kg, 2 lyżki itp? Czy to już jest sprzeczne z normalizacją?
A jak teraz sprawdzić dane przy wprowadzaniu. O tyle, o ile przy wczesniejszej tabeli sprawdzalem, czy salatka o nazwie juz jest i czy posiada skladniki to tutaj musze pewnie skakac od tabelki do tabelki i najpierw sprawdzić czy salatka jest, potem, jakie ma id, zobaczyc w xrefie jakie skladniki sa do niej przypisane i na koniec wywalic te skladniki, tak? Jak wychwycić duble wpisów?
btw. jak zdefiniować PK w Xref?Paweł Ługowski edytował(a) ten post dnia 26.08.08 o godzinie 21:35 -
Ok, podążając Twoim przykłądem i przykładami normalizacji rozumiem, że tabele powinny wyglądać mniej więcej tak:
skladnik:
id | skladnik
1 | cebula
2 | kukurydza
3 | mieta
4 | chmiel
salatki:
id | nazwa
1 | cebul_kuk (cebula, kukurydza)
2 | ceb_chmiel (cebula, chmiel)
itd...
Xref:
salatka | skladnik
1 | 1
1 | 2
2 | 1
2 | 4
itd.
Dobrze rozumiem?