Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][MySQL][PHP]Zapytanie sql w zmiennej(kilka wpisow na raz)
Forum PHP.pl > Forum > Przedszkole
Toskan
Witam
tym razem trochę szukałem zanim napisałem(poprzednio napisałem temat bez poszukania) nie dało to jednak zamierzonego efektu
mój problem polega na tym ze nie potrafię skonstruować zapytania MySQL
w tabelce x mam:
p1
p2
p3
p4;
sa to id
w tabelce y mam:
p_id
nazwa;

zapytanie miało by pobrać do każdego p1 p2 p3 p4 nazwę na podstawie p_id
mógł bym napisać 4 zapytania ale tu nie chodzi o to:)
pewnie jest to proste ale nie dla mnie:)
głupio tak ale proszę o gotowe zapytanie:/
b4rt3kk
  1. SELECT name FROM y INNER JOIN x ON x.id=y.id


Nie jestem pewien czy dobrze zrozumiałem problem.
bostaf
Cytat(Toskan @ 7.10.2012, 20:17:59 ) *
głupio tak ale proszę o gotowe zapytanie:/

No przynajmniej szczery jesteś smile.gif
Powiedz no, te p1, p2, ... to wartości w kolumnie "id" w tabeli "x", tak? A w tabeli "y", w kolumnie "p_id" są wartości odpowiadające tym z kolumny "id" w tabeli "x", czyli p1, p2, itd. Tak? Jak nie to rozpisz jakoś ładniej te tabele z przykładowymi wartościami, żeby było jasne jak to wygląda, np:
Kod
tabela x
id
--
p1
p2
p3
p4

tabela y
p_id | nazwa
-----+------
p1   | Cośtam
p4   | Inna nazwa
Toskan
p1-p4 sa to cyfry(to takie jakby id)
p_id sa to cyfry
nazwa tekst
np
p1=p_id wyświetla nazwę
zapomniałem jeszcze o czymś ważnym:)
sa to dane do profilu pobierane za pomocą $_GET
mam jedna zmienna
  1. $zmienna = mysql_fetch_array(mysql_query("select * from x where pesel = ".$_GET['a']));

wyświetla to dane z tabelki x na podstawie 'pesel'
i teraz hmm
może da się ta zmienna tak zrobić żeby nie trzeba było 2 zmiennych?
  1. $zmienna2 = mysql_fetch_array(mysql_query("select * from x inner join y on p_id ... where pesel =".$_GET[a']));

nie wiem co ma być na miejscu kropek pisałem gdzieś podobne zapytanie ale było na podstawie jednej wartości:)


@edit
tu jest to co mowilem ze pisalem kiedys
  1. $zmienna = mysql_fetch_array(mysql_query("select * from z inner join x on gracz_id = gracz and id = aktywny where gracz = ".$_GET['a']));
bostaf
Cytat(Toskan @ 7.10.2012, 20:53:01 ) *
p1-p4 sa to cyfry(to takie jakby id)
p_id sa to cyfry
nazwa tekst
np
p1=p_id wyświetla nazwę

Nie rozumiem tego. "p1" to zdecydowanie nie jest cyfra. Masz na myśli, że p1, p2, itd. to nazwy kolumn, w których przechowywane są cyfry? A najlepiej nie odpowiadaj na to pytanie tylko "narysuj" te tabele w notatniku, żeby było widać nazwy kolumn i przykładowe dane, i wklej tu między znacznikami [code][/code].
BaN
O ile dobrze zrozumiałem, to chyba powinieneś połączyć te tabele y tyle razy ile jest tych pól p[cyfra], zaś w WHERE podać warunek, czyli
  1. $query = 'SELECT y1.nazwa AS nazwa1,y2.nazwa AS nazwa2,y3.nazwa AS nazwa3,y4.nazwa AS nazwa4
  2. FROM x
  3. JOIN y AS y1 ON y1.p_id=x.p1
  4. JOIN y AS y2 ON y2.p_id=x.p2
  5. JOIN y AS y3 ON y3.p_id=x.p3
  6. JOIN y AS y4 ON y4.p_id=x.p4
  7. WHERE pesel=\'' . mysql_real_escape_string($_GET['a']) . "'";

Być może JOIN należy zamienić na LEFT JOIN, nie wiem czy dla wszystkich pól p[cyfra] są odpowiedniki w tabeli y. Jeśli zaś pesel nie jest typu znakowego, tylko liczbowego, to zamiast mysql_real_escape_string można zastosować rzutowanie na odpowiedni typ, apostrofy są wtedy niepotrzebne

Toskan
Cytat(BaN @ 7.10.2012, 22:55:32 ) *
O ile dobrze zrozumiałem, to chyba powinieneś połączyć te tabele y tyle razy ile jest tych pól p[cyfra], zaś w WHERE podać warunek, czyli
  1. $query = 'SELECT y1.nazwa AS nazwa1,y2.nazwa AS nazwa2,y3.nazwa AS nazwa3,y4.nazwa AS nazwa4
  2. FROM x
  3. JOIN y AS y1 ON y1.p_id=x.p1
  4. JOIN y AS y2 ON y2.p_id=x.p2
  5. JOIN y AS y3 ON y3.p_id=x.p3
  6. JOIN y AS y4 ON y4.p_id=x.p4
  7. WHERE pesel=\'' . mysql_real_escape_string($_GET['a']) . "'";

Być może JOIN należy zamienić na LEFT JOIN, nie wiem czy dla wszystkich pól p[cyfra] są odpowiedniki w tabeli y. Jeśli zaś pesel nie jest typu znakowego, tylko liczbowego, to zamiast mysql_real_escape_string można zastosować rzutowanie na odpowiedni typ, apostrofy są wtedy niepotrzebne

Wieczoram(~22) sprawdze

wyzej sa zdjeccia tabelki o ktore ktos prosil
nadal prosze o wypowiedzi

@edit
sprawdzilem, nie dziala wyswiietla wielka litere S ale konstrukcja przysunela mi pewien pomysl jutro jak bede mial czas sprobuje to napisac

musze odswiezyc temat poniewaz nadal tego nie zrobilem:D
uzyje teraz normalnych nazw tabelek nie wiem czemu tamte dalem jako x i y tabelka x to "pokemon_pokemony_gracze" a tabelka y "pokemon_ruchy"
zeby nie trzeba bylo czytac calej reszty
chce zrobic zeby jak dam $zmienna['p1'] wyswietlala sie r_nazwa gdzie p1=p_id
  1. $gracz1 = mysql_fetch_array(mysql_query("select * pokemon_pokemony_gracze inner join pokemon_ruchy on p1 = p_id and pokemon_id = r_nazwa where pesel = ".$_GET['a']));

pojawia sie error :
  1. Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\pokemon\pok.php on line 11

gdzie line 11 jest to co napisalem wyzej
zdjecie tabelek

prosze was bardzo o pomoc ja juz nie mam pomyslow czemu to nie chce dzialac:(

Ludzie bardzo was prosze o pomoc, do calej gry bede potrzebowal jeszcze wiele podobnych zapytan jest to pewnie bardzo proste jednak ja nie mam pomyslu jak to zrobic
na chwile obecna projekt stoi w miejscu:(
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.