Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy mogę pobrać z bazy wszystkie rzędy jednym zapytaniem?
Forum PHP.pl > Forum > Bazy danych > MySQL
konradmm
Moze z samego tytulu nie do konca wiadomo co mam na mysli, otoz:

Mam tabelę z wieloma, nazwijmy to, modyfikacjami wraz z parametrami.
Potrzebuję w przypadku konkretnego modelu wyswietlic na ekranie kilka modyfikacji o roznych ID.

Modyfikacje ktore chce wyswietlic, przechowuje w ciagu np. "1:44;2:50;101:5;102:69".
Aktualnie uzylem explode (tak, PHP) by rozdzielic ten ciag najpierw na array("1:44","2:50",...) a pozniej przechowuje dane w formacie $mod[0][0] i $mod[0][1]...

Potrzebuję w jakis sposob uzyc funkcji ktora pozwolilaby mi odwolac sie do wyciagnietych danych z tabeli uzywajac np. id modyfikacji.
Czy jest taka mozliwosc, bym mogl np. uzyc $wiersz[101]['nazwa'] ?
trueblue
Tabela jest niepoprawnie zbudowana.

Po rozdzieleniu średnikami, w pętli przetwarzasz każdy string X:Y rozdzielając parę dwukropkiem. Pod indeksem X tabeli zapisujesz wartość Y.
konradmm
Cytat(trueblue @ 22.12.2016, 19:06:59 ) *
Tabela jest niepoprawnie zbudowana.

Po rozdzieleniu średnikami, w pętli przetwarzasz każdy string X:Y rozdzielając parę dwukropkiem. Pod indeksem X tabeli zapisujesz wartość Y.


Obawiam sie ze nie rozumiem, skad przypuszczenie ze tabela jest niepoprawnie zbudowana?
I mowisz aktualnie o tabeli w bazie danych czy o tabeli jako o arrayu?
trueblue
Mam na myśli modyfikacje, które przechowujesz w jednym polu.

Chyba, że ja nie rozumiem co dokładnie chcesz dalej zrobić - mając id=101 skąd chcesz pobrać wartość/gdzie jest przechowywana nazwa?
konradmm
Cytat(konradmm @ 22.12.2016, 19:03:47 ) *

Mam tabelę z wieloma, nazwijmy to, modyfikacjami wraz z parametrami.


wyglada mniej wiecej tak:
Kod
ID | NAZWA | WARTOSC_1 | WARTOSC_2 | WARTOSC_3 | LACZNA_WARTOSC

id to int, ktorego sam nadaje ale jest to indeks primary.

edit//
a informacje o modyfikacjach sa w tabeli `produkty` gdzie mam id/nazwe/wyposazenie produktu, gdzie wyposazenie to jest ten wlasnie ciag "1:44;2:50;101:5;102:69".

W wielkim skrocie mowiac, potrzebuje wyswietlic na stronie produkt ktory jesli ma te modyfikacje w/w, to wyswietli sie kolejno Nazwa Modyfikacji dla id1 (wartosc modyfikacji dla id1), nazwa dla id2... 101 i 102 ;p
trueblue
Czyli informacje są dwóch odrębnych tabelach?

Jeśli tak, to masz niepoprawnie zbudowane tabele/bazę.
konradmm
Cytat(trueblue @ 22.12.2016, 21:34:53 ) *
Czyli informacje są dwóch odrębnych tabelach?

Jeśli tak, to masz niepoprawnie zbudowane tabele/bazę.


no to jeszcze raz biggrin.gif
nie mowie ze moja baza jest zrobiona poprawnie, nigdy nie robilem takiego projektu , stad tez moje pytania
Chodzi mi o to ze w jednej tabeli mam dane produktow oraz modyfikacje ktore zawieraja (uzywajac ciagu: "idmoda:wartoscmoda;idmoda2:wartoscmoda2;itd..."
W drugiej tabeli posiadam informacje na temat modyfikacji czyli: "idmoda | nazwamoda | wartosc1..." (struktura tabeli)

Wyswietlajac produkt chce wyswietlic kolejno rozne modyfikacje ktore sa w tym ciagu.
trueblue
Dzięki za ponowne wyjaśnienie.

Rozumiem w czym jest problem i dlatego mówię, że baza jest źle zbudowana - powinna być przebudowana.
Nie jest niemożliwym wyciągnięcie tych informacji (po prostu rozdziel pary X:Y i będziesz miał id, te id podstaw do warunku WHERE), ale jak już sam pewnie zauważyłeś jest to kłopotliwe.
konradmm
Cytat(trueblue @ 22.12.2016, 21:47:11 ) *
Dzięki za ponowne wyjaśnienie.

Rozumiem w czym jest problem i dlatego mówię, że baza jest źle zbudowana - powinna być przebudowana.
Nie jest niemożliwym wyciągnięcie tych informacji (po prostu rozdziel pary X:Y i będziesz miał id, te id podstaw do warunku WHERE), ale jak już sam pewnie zauważyłeś jest to kłopotliwe.


A jak to z obciazeniem dla bazy? Nie bedzie to "zbyt kłopotliwe" dla bazy jesli pojawi sie u mnie produkt ktory bedzie mial np 25 modyfikacji a w petli bedzie lacznie 25 razy zapytanie do bazy z innym id ?
trueblue
Zapytanie będzie jedno: WHERE id=1 OR id=2 OR..... lub WHERE id IN(1,2,....)
konradmm
Cytat(trueblue @ 22.12.2016, 22:02:35 ) *
Zapytanie będzie jedno: WHERE id=1 OR id=2 OR..... lub WHERE id IN(1,2,....)


I tutaj rodzi sie moje drugie pytanie (oczywiscie chodzi o przypadek IN(1,2,....)
Jesli tak to zrobię, jak w takim razie mogę wypisać te dane na ekran, zapytanie zwroci mi kilka wierszy, jak mogę określić który wiersz ma aktualnie czytac.
Nie będę mógł tego zrobic w stylu $row[1]['name'] (gdzie 1 to id)...
trueblue
Będziesz mógł jeśli przepiszesz tablicę nadając kluczowi wartość id.
Lub: https://phpdelusions.net/pdo/fetch_modes#FETCH_GROUP
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.