![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam! Mam problem.
Powiedzmy, że buduję pociąg (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) W tabeli przechowuję dane różnych wagoników. Każdy wagonik opisują takie dane jak ciężar, ilość miejsc dla pasażerów. W bazie takich wagoników wpisanych jest już wiele z różnymi wartościami. Stawiam warunek - wagony w pociągu mogą mieć max ciężar powiedzmy 100t. Jeżeli mam powiedzmy wagoniki po 2t, 10t, 3t, 4t to takich kombinacji może być wiele. Jak stworzyć odpowiednie zapytanie do bazy danych, aby zwrócone wyniki, inaczej mówiąc suma ich ciężarów, nie była wyższa od mojego założenia? Dodatkowo, zwrócone wyniki powinny być zawsze losowe, czyli tworzyć różne dozwolone kombinacje pociągów. Jak powinno wyglądać takie zapytanie? :/ Proszę o pomoc. Ten post edytował pc5 15.05.2009, 20:41:18 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Znalazłem coś takiego :
Tabela wygląda mniej więcej tak : id | nazwa| dlugosc_modulu | waga 0 | Cysterna-A1 | 2 | 23 1 | Cysterna-B341 | 2 | 44 2 | Pasażerski A54 | 3 | 55 3 | Pasażerski A120 | 4 | 68 4 | Węglarka r1910 | 1 | 10 5 | WARS 1 | 5 | 80 6 | WARS 2 | 4 | 50 Zapytanie które wkleiłem zsumuje wszystkie wagoniki. Długość modułu to długość wagonu, w zapytaniu generowana jest suma (długość) pociągu z wagonikiem z wiersza. Czyli : 4 6 8 12 itd Nie wiem jak zrobić aby z bazy losowane były losowe wagoniki o długości pociągu powiedzmy max 50. Wagoniki mogą się powtarzać. Byle przy każdym selct wychodziły różne kombinacje. Ktoś może pomóc? Ten post edytował pc5 15.05.2009, 19:07:24 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 29 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Może po prostu pobiesz powiedzmy 20 wagoników.
Dodatkowo:
i jak robisz pętle, która wyświetla te wszystkie wagoniki to:
PS: Pisane z palca. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Może po prostu pobiesz powiedzmy 20 wagoników. Myślałem nad tym. Postanowiłem postawić poprzeczkę wyżej (trzeba się rozwijać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ) i wykonać to zadanie w zapytaniu do bazy. Można by to jeszcze rozbić na parę zapytań, ale tego chcę uniknąć. Dla przykładu - chcemy zbudować pociąg o max ciężarze 200t. Jeżeli najmniejsza waga wagonika to 20t - może się okazać, że wyjdzie konfiguracja 10 x 20t. Czyli powinniśmy pobrać teoretycznie minimum 10 wyników z bazy. Jeżeli pobieramy minimym 10, może się okazać, że już 2 pierwsze wiersze będą wyczerpywały limit - powiedzmy 2 wagoniki po 100t? Tworzy się nadmiar. Jeżeli zapytanie będzie wywoływane dziesiątki tysięcy razy - problem. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 99 Pomógł: 15 Dołączył: 15.11.2007 Skąd: Nowogród Bobrz. Ostrzeżenie: (0%) ![]() ![]() |
Nie uda Ci się tego zrobić zapytaniem do bazy. Ewentualnie w bazie, ale funkcją/procedurą składowaną (czyli de facto programem, tyle że napisanym jakąś odmianą SQL-a).
Najprościej to tak jak kolega wyżej napisał: ORDER BY RAND() i sumowanie. Jedynie, żeby nie pobierać całej tabeli możesz sobie wyliczyć ile max. rekordów będzie potrzebne pobierając minimalną wagę wagonika z tabeli. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 08:57 |