![]() |
![]() |
![]()
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 ? ![]() |
|
|
![]() |
![]()
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ś. -------------------- • Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń... • |
|
|
![]()
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 ![]() |
|
|
![]()
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.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
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ł ![]() 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
![]() 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ć. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
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ć.
![]() ![]() @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. -------------------- • Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń... • |
|
|
![]()
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.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
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: 19.08.2025 - 14:59 |