Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobranie i wyświetlanie danych z 2 tabel, gdzie wartość z jednej jest zależna od drugiej
Forum PHP.pl > Forum > Przedszkole
Elber
Witam, mam taki problem, mam tabelę prefix gdzie jest unikalny numer id pod nazwą prefixid i mam tabelę phrase z której chcę wyciągnąć dane zawarte w polu text, ale tylko z tych rekordów których wartość varname to prefix_ID Z TABELI PREFIX_title_rich po czym chcę żeby mi się to wyświetliło w forme

id - text

Próbowałem coś takiego ale to coś mi nie chce zadziałać sad.gif Proszę o pomoc.


  1. $query="select `prefixid` from prefix order by prefixid asc;";
  2. $wynik=mysql_query($query);
  3.  
  4.  
  5. $query2='select `text` from phrase WHERE varname LIKE "prefix_.$prefix['prefixid']._title_rich";';
  6. $wynik2=mysql_query($query2);
  7.  
  8.  
  9. while($prefix=mysql_fetch_array($wynik)) {
  10. while($text=mysql_fetch_array($wynik2)) {
  11. echo $prefix['prefixid']." - ".$text['text']."<br>";
  12. }
  13. }
d3ut3r
Skąd bierzesz wartość zmiennej $prefix['prefixid'] dla drugiego zapytania ? skoro już zacząłeś z pętlami to $query2 musi być wykonywane x razy gdzie x to liczba rekordów zwróconych z zapytania $query.
Elber
Cytat(d3ut3r @ 29.10.2010, 23:14:50 ) *
Skąd bierzesz wartość zmiennej $prefix['prefixid'] dla drugiego zapytania ? skoro już zacząłeś z pętlami to $query2 musi być wykonywane x razy gdzie x to liczba rekordów zwróconych z zapytania $query.


wartość $prefix['prefixid'] biorę z

  1. $query="select `prefixid` from prefix order by prefixid asc;";
  2. $wynik=mysql_query($query);
  3. $prefix=mysql_fetch_array($wynik);
d3ut3r
a po wykonaniu tego zapytania (którego w kodzie w pierwszym poście de facto w takiej formie nie ma) co masz w zmiennej $prefix ?
Elber
A jest jakiś inny sposób aby wylistować te dane o które mi chodzi questionmark.gif
tehaha
najlepiej w ogóle opisz co chcesz zrobić, bo Twój sposób wydaje się być zbytecznie przekombinowany
Elber
mam tabelę prefix gdzie jest unikalny numer id pod nazwą prefixid i mam tabelę phrase z której chcę wyciągnąć dane zawarte w polu text, ale tylko z tych rekordów których wartość varname to prefix_ID Z TABELI PREFIX_title_rich po czym chcę żeby mi się to wyświetliło w forme

id - text

Czyli np.

w tabeli prefix jest pole prefixid ktore ma wartość 20

w tabeli phrase mam pole varname które ma wartosć prefix_20_title_rich i chce zeby mi wyświetliło zawartość pola text smile.gif

analogicznie jeśli prefixid = 29 to chce z tabeli phrase wyciągnąć pole text gdzie varname = prefix_29_title_rich

smile.gif
tehaha
generalnie trochę źle przemyślałeś sprawę z tym prefixem, bez sensu takie wstawianie numeru id do prefix_[ID]_title_rich powinna być kolumna z samym ID a jeżeli to nie wystarczy to jeszcze druga kolumna z title_rich

wtedy wszystko wyciągniesz jednym prostym zapytaniem z JOIN:
  1. SELECT a.text FROM phrase a JOIN prefix b ON b.prefixid = a.varname

a jeżeli trzeba by użyć tej drugiej kolumny to wtedy:
  1. SELECT a.text FROM phrase a JOIN prefix b ON b.prefixid = a.varname AND a.varname_title = 'title_rich'


Elber
Ale to nie ja robiłem baze, to baza ze skrypt vbulletin smile.gif Mógłbyć napisąć mi dokładniej jak to wyciągnąć? bo tej qwerendy co wstawiłeś nie ogarniam winksmiley.jpg
tehaha
aha, czyli Ty chcesz tylko jakąś tam funkcje sobie dorobić, no dobrze to chyba jedyne wyjście to kombinować tak jak próbowałeś na początku, więc patrząc na Twój przykład:
1. żeby wstawić zmienną prefixid do drugiego zapytania najpierw trzeba ją pobrać funkcją mysql_fetch_array() czyli w linijkach 3-4 powinno być
  1. $prefix=mysql_fetch_array($wynik)

2. po mysql_query() daj or die(mysql_error()) czyli mysql_query() or die(mysql_error()), żeby sprawdzić czy nie wywala błędów bo już widzę że w drugim zapytaniu jest nie potrzebny ; na końcu
3. nie potrzebne są 2 pętle , pierwszym zapytaniem pobierasz prefix, wstawiasz do drugiego zapytania i potem wynik odbierasz już jedną pętlą

Cytat
Mógłbyć napisąć mi dokładniej jak to wyciągnąć? bo tej qwerendy co wstawiłeś nie ogarniam
sory, ale to żadna wymówka:P chcesz mieć jakieś funkcje to trzeba usiąść i to zrobić, na forum łatwo uzyskasz pomoc ale zawsze wymagany jest wkład własny
Elber
Hmm, mam teraz

  1. $query="select `prefixid` from prefix order by prefixid asc;";
  2. $wynik=mysql_query($query) or die(mysql_error());
  3.  
  4. $prefix=mysql_fetch_array($wynik);
  5.  
  6.  
  7. $query2='select `text` from phrase WHERE varname LIKE prefix_.$prefix["prefixid"]._title_rich;';
  8. $wynik2=mysql_query($query2) or die(mysql_error());
  9.  
  10. $text=mysql_fetch_array($wynik2);


i mi wywala

Cytat
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '["prefixid"]._title_rich' at line 1



Edit:

Jak zrobie tak:
  1. $query="select `prefixid` from prefix order by prefixid asc;";
  2. $wynik=mysql_query($query) or die(mysql_error());
  3.  
  4. $prefix=mysql_fetch_array($wynik);
  5. $d=$prefix["prefixid"];
  6.  
  7. $query2="select `text` from `phrase` WHERE `varname` = prefix_".$d."_title_rich";
  8. $wynik2=mysql_query($query2) or die(mysql_error());
  9.  
  10. $text=mysql_fetch_array($wynik2);


TO mi wyskakuje "Unknown column 'prefix_1_title_rich' in 'where clause'" ....
tehaha
bo wartość trzeba objąć cudzysłowem
  1. $query2='select `text` from phrase WHERE varname LIKE "prefix_.$prefix["prefixid"]._title_rich";


poza tym nie wiem czemu w każdym zapytaniu dajesz średnik na końcu, nie powinno go tam być

$query="select `prefixid` from prefix order by prefixid asc;";
Elber
Teraz mi wyskakuje

Cytat
Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /home/virtual/ufs.pl/htdocs/pref.php on line 13

Parse error: syntax error, unexpected '`' in /home/virtual/ufs.pl/htdocs/pref.php on line 13


a 13 linia to te zapytanie

  1. $query2='select `text` from phrase WHERE varname LIKE "prefix_.$prefix["prefixid"]._title_rich";


EDIT:
Jak zrobiłem tak

  1. $query="select `prefixid` from prefix order by prefixid asc";
  2. $wynik=mysql_query($query) or die(mysql_error());
  3.  
  4. $prefix=mysql_fetch_array($wynik);
  5.  
  6. $d=$prefix["prefixid"];
  7.  
  8. $query2='select `text` from phrase WHERE varname LIKE "prefix_.$d._title_rich"';
  9. $wynik2=mysql_query($query2) or die(mysql_error());
  10.  
  11. //$text=mysql_fetch_array($wynik2);
  12.  
  13. while($text=mysql_fetch_array($wynik2)) {
  14.  
  15. echo $text["text"];
  16.  
  17. }


To nic mi nie wyświetla ... dosłownie nic... a teraz whlie powinien mi wyświetlić dane z tabeli ... CO robię źle ?
tehaha
ale Ty chcesz wyciągnąć jakiś konkretny prefix czy dla każdego prefixu chcesz wyciągnąć dane z tej drugiej tabeli?
Elber
Dla każdego dane z drugiej tabeli, chce żeby mi się to tak wyświetliło

PrefixID - Text
  1. echo $prefix["prefixid"]." - ".$text["text"];
tehaha
tak na szybko:
  1. $query="select `prefixid` from prefix order by prefixid asc";
  2. $wynik=mysql_query($query) or die(mysql_error());
  3.  
  4. while($prefix=mysql_fetch_array($wynik))
  5. {
  6. $d=$prefix["prefixid"];
  7.  
  8. $query2='select `text` from phrase WHERE varname LIKE "prefix_'.$d.'_title_rich"';
  9. $wynik2=mysql_query($query2) or die(mysql_error());
  10.  
  11. while($text=mysql_fetch_array($wynik2)) {
  12.  
  13. echo $text["text"];
  14.  
  15. }
  16. }
ale ogólnie powinieneś unikać zapytań wykonywanych w pętli i najlepiej jakbyś spróbował zrobić to z JOIN
Elber
Dzięki wielkie za pomoc smile.gif w końcu zadziałało tak jak ma smile.gif Naprawdę wielkie dzięki smile.gif Generalnie ten skrypt będę wykonywał tylko co jakiś czas więc tak może zostać smile.gif

Pozdro
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.