![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 22.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie
Aktualnie piszę aplikację bazodanową co prawda nie w PHP, a w C++ z użyciem bibliotek Qt, baza danych to MySQL więc chyba dział dobry. I mam pewien problem nad którym się głowię. Mianowicie posiadam 2 tabele, jedna w której przechowywane są osoby w formie (dajmy na to lista klientów) :
natomiast druga tabela (dajmy na to do przechowywania listy zakupów):
Tabele z listą zakupów wyświetlam w widżecie QTableView, po wcześniejszym powiązaniu jej z QSqlTableModel. Chciałbym aby zamiast liczb w tabeli z listą zakupów (pole user_id) było wyświetlane automatycznie pole "name" z tabeli klientów. Niestety typy pól są inne (int vs varchar) i nie mam pomysłu jak coś takiego zrobić. Pomożecie ? (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 31 Dołączył: 12.10.2008 Skąd: WAT Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem trochę...
"Chciałbym aby zamiast liczb w tabeli z listą zakupów (pole user_id) było wyświetlane automatycznie pole "name" z tabeli klientów." Przebuduj sobie strukturę tabeli i inserty do niej. :x Chyba, że chodzi Ci o zapytanie do bazy, które połączy te dwie tabele i da listę product_id | name to:
albo za pomocą JOIN takie coś. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 715 Pomógł: 47 Dołączył: 5.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nie rozumiem trochę... Prawdę mówiąc, ja też nie. Zawsze można konwertować string na int przed zapisem do bazy,tylko po co (IMG:style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A ja bym Ci się radził zastanowić czy MySQL to tutaj dobry wybór... Aplikacja będzie bowiem wymagać do działania postawionego serwera, co niekoniecznie będzie możliwe jeśli ma ona być przenośna. Zabierzesz soft na pendrive i u kogoś nie uruchomisz już bo on nie będzie umiał dostać się do bazy. W takich wypadkach lepiej zdać się na wspieraną także w Qt inną bazę... SQlite.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 22.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
@up nie rozumiem co twoja wypowiedź ma do rzeczy ? Ja nie zadałem pytania typu "jaką bazę wybrać aby nie wymagała serwera SQL". BA, nawet nigdzie nie napisałem, że ma ona być przenośna. Wybacz, ale drażnią mnie ludzie którzy wszędzie wszystkim chcą wciskać swoje mądrości.
Niestety nikt z was mnie nie zrozumiał (IMG:style_emoticons/default/tongue.gif) Być może dlatego że ja piszę projekt w C++ a wy używacie PHP. Jak już wspomniałem używam bibliotek Qt do zrealizowania tego projektu, że używam klasy QTableView z wywołaniem setModel(QSqlTableModel) która to klasa ostatnia odwala za mnie wszystkie zapytania i automatycznie wyświetla je w tabelce. Najbliżej odpowiedzi poprawnej był YaQzi, za co dostaje punkt. Skorzystam z klasy QSqlRelationalTableModel. Ten post edytował winuser 20.07.2011, 00:34:52 |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To co napisałem w sprawie bazy to była tylko sugestia. Niestety, ale obecność bibliotek Qt do obsługi różnych baz w przypadku braku postawionego na kompie serwera tejże bazki jest tak samo sensowna jak próba gaszenia pożaru bez posiadania czegokolwiek do tego celu (IMG:style_emoticons/default/wink.gif) Ma ona sens tylko w wypadku gdy faktycznie całość będzie nieprzenośna. IMHO uważam, że takie podejście to bardzo poważne ograniczenie.
Co do samego tematu... YaQuzi dał wynik, ale jego wydajność jest delikatnie mówiąc nieco dyskusyjna. Dobrze chociaż, że zauważył, iż JOIN można użyć. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 31 Dołączył: 12.10.2008 Skąd: WAT Ostrzeżenie: (0%) ![]() ![]() |
Join też tego magicznie nie skleja tylko musi podobnie do podselecta wyszukać co połączyć. (IMG:style_emoticons/default/wink.gif) Na moje oko to user_id w drugiej tabeli jest co najmniej uniq więc nie ma powtarzalnych podselectów po tym samym. Krócej w kodzie nie zawsze znaczy wydajniej ale dobra, w sumie nie o wydajności temat. (IMG:style_emoticons/default/tongue.gif)
@winuser Jeśli QSqlTableModel daje Ci model jednej z tabel bazy danych to spróbuj sobie z zapytania zrobić widok i do niego dostać się przez QSqlTableModel. |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Owszem, ale podzapytania zazwyczaj (wiadomo... zależy od sytuacji) są mniej wydajne niż złączenia. Poza kartezjańskim, które najczęsciej jest efektem kompletnego braku wiedzy o złączeniach w bazie u piszącego.
|
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 1 789 Pomógł: 41 Dołączył: 30.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Kolego winuser, drażnią mnie osoby, które nawet nie sięgają do oficjalnej dokumentacji Nokii nt. chociażby QSqlRelationalTableModel. Zanim następnym razem zadasz pytanie, przeglądnij dokumentację biblioteki, której używasz.
Zakładając, że masz: users: user_id, name user_products: user_id, product_id I chcesz wyświetlić wszystkie rekordy z user_products, automatycznie dołączając zawartość tabeli users i ukrywając pole user_id, powinieneś zrobić coś takiego:
Co oznacza: kolumna "1" w tabeli user_products jest kluczem obcym do tabeli users (gdzie kluczem głównym jest user_id) i jej zawartość ma zostać zastąpiona zawartością kolumny name z tabeli users. Ponieważ temat nie ma nic wspólnego z MySQL, przenoszę do go Komputery i oprogramowanie.
Powód edycji: [tiraeth]: Autor sobie sam odpowiedział i raczył nawet zedytować swój post, więc zamknę temat.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 00:07 |