Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php][mysql] łączenie zapytań
oximus
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


witam, mam taki problem, że nie potrafię wyniku zapytania z jednej tabeli wprowadzić jako zmienną do szukania w zapytaniu w drugiej tabeli...może przykład:

  1. <?php
  2. require_once ('mysql_connect.php');
  3.  
  4. $query='SELECT Prefix, Text, Whenl, Crossing_Id FROM events WHERE prefix=\"*\" ORDER BY Whenl DESC LIMIT 1';
  5. $result = mysql_query($query) or die ('blad:' . mysql_error());
  6. while (list($Prefix, $Text, $Whenl, $Crossing_Id) = mysql_fetch_row($result)){
  7. $strDate = &#092;"$Whenl\";
  8. $strYear  = substr( $strDate, 0, 4 );
  9. $strMonth = substr( $strDate, 4, 2 );
  10. $strDay = substr( $strDate, 6, 2 );
  11. $strHour  = substr( $strDate, 8, 2 );
  12. $strMinute = substr( $strDate, 10, 2 );
  13. $strSecond = substr( $strDate, 12, 2 );
  14. $strDate = $strYear . '-' . $strMonth . '-' . $strDay . ' ' . $strHour . ':' . $strMinute . ':' . $strSecond;
  15. $pytanie='SELECT Name FROM crossing WHERE Id=\"$Crossing_Id\"';
  16. $wynik = mysql_query($pytanie) or die ('blad:' . mysql_error());
  17. while (list($Name) = mysql_fetch_row($wynik)){
  18. echo (&#092;"$Name\");
  19. }
  20. echo (&#092;"$Text\");
  21. ?>
  22. <br>
  23. <br>
  24. <?php
  25. echo(&#092;"$strDate\");
  26. } 
  27. ?>

Nie bierze mi pod uwagę w ogóle zapytania drugiego, chociaż bład nie wyskakuje. Wyświetla wynik pierwszego zapytania. Jeśli napisałem jakiś bzdurny kod to wynika to z mojej tygodniowej znajomości z php, za co przepraszam.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A nie prościej użyć jednego zapytania:
  1. SELECT e.Prefix, e.Text, e.Whenl, e.Crossing_Id,c.Name
  2. FROM events e, crossing c WHERE e.Prefix="*" AND e.Crossing_Id=c.Id

A tak pozatym zamiast
echo ("$cos");
dawaj
echo $cos;
efekt taki sam, a bardziej przejżyste
Go to the top of the page
+Quote Post
oximus
post
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


No, ok, efekt jest taki sam, dzieki, ale dalej nie moge dowiedziec sie jaka jest nazwa NAME skrzyzowania CROSSING, ktore zostalo wskazane jako ostatnie. Poza tym nie rozumiem tych 'e', 'c' w zapytaniu, gdzie o tym poczytac, w ksiazce nie mam.
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $pytanie='SELECT Name FROM crossing WHERE Id= '$Crossing_Id'';
  3. ?>


Cytat
Poza tym nie rozumiem tych 'e', 'c' w zapytaniu, gdzie o tym poczytac, w ksiazce nie mam.

Szukaj o alias do tabeli
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




e i c to aliasy tabel (żeby było krócej)
Jak cchesz nazwę, to:
while (list($Prefix, $Text, $Whenl, $Crossing_Id,$name) = mysql_fetch_row($result))
Go to the top of the page
+Quote Post
oximus
post
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Dobra chłopaki i tak mi to nie działa - nie wiem czemu...ale dzieki za pomoc...jakoś to obejdę...
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




OJ szybko się poddajesz. Jakbyś pokazał teraz nowy kod, z tym co ci zapropponowalem, może da się coś zrobić
Go to the top of the page
+Quote Post
oximus
post
Post #8





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


juz zglupialem...jeszcze mam pytanie gdzie w Twoim zapytaniu wcisnac DESC? bo to musi byc ostatnie pole prefix z '*'!
  1. <?php
  2. require_once ('mysql_connect.php');
  3.  
  4. $query='SELECT e.Prefix, e.Text, e.Whenl, e.Crossing_Id,c.Name 
  5. FROM events e, crossing c WHERE e.Prefix=\"*\" and e.Crossing_Id=c.Id LIMIT 1';
  6. $result = mysql_query($query) or die ('blad:' . mysql_error());
  7. while (list($Prefix, $Text, $Whenl, $Crossing_Id) = mysql_fetch_row($result)){
  8.  
  9. $pytanie='SELECT Name FROM crossing WHERE Id='$Crossing_Id'';
  10. $wynik = mysql_query($pytanie) or die ('blad:' . mysql_error());
  11. while (list($Name) = mysql_fetch_row($wynik)){
  12. echo $Name;
  13. }
  14. echo $Text, $Whenl;
  15. } 
  16. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2.  
  3. require_once ('mysql_connect.php');
  4.  
  5. $query='SELECT e.Prefix, e.Text, e.Whenl, e.Crossing_Id,c.Name 
  6. FROM events e, crossing c WHERE e.Prefix=\"*\" and e.Crossing_Id=c.Id ORDER BY e.Whenl DESC LIMIT 1';
  7. $result = mysql_query($query) or die ('blad:' . mysql_error());
  8. while (list($Prefix, $Text, $Whenl, $Crossing_Id,$Name) = mysql_fetch_row($result)){
  9.  
  10. echo $Name;
  11. echo $Text.$Whenl;
  12. }
  13.  
  14. ?>
Go to the top of the page
+Quote Post
oximus
post
Post #10





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Nospor, jesteś koleś (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .. dzięki!

Mam jeszcze przed sobą ostatnie, najtrudniejsze wg mnie zadanie...oczywiście proszę o pomoc. Wiec, mam powyższy skrypt, który pięknie działa.
Oto interesująca mnie tabela:
(IMG:http://users.mci.tychy.pl/~barakuda/1.jpg)
Więc zadanie jest takie:
Czeszemy bazę od dołu (to juz mamy). Jak pierwsza od dołu będzie gwiazdka to wyświetlam info o niej (to też już mam). Natomiast jeśli pierwszy od dołu wpis bedzie zawierał słowo "Reset" (niestety w kolumnie "Text") czyli bedzie przed gwiazdka (od dołu) to wtedy np: echo('OK');
Sytuacja na jpg przedstawia stan kiedy skrypt, ktory mam, dziala poprawnie. Jednak gdyby wywalic ostatnia gwiazdke z kolumny 'prefix' musiałby załapać słowo 'Reset' z kolumny "text" i pokazac ze wszystko gra, a tego nie robi.
Help, chyba musze sie przespac...zle skladam zdania..;]
Bardzo proszę na pomoc, bo jutro muszę to pokazać prowadzącemu.

Wydaje mi sie, ze mozna to zrobic przez mysql_num_rows...ale nie jestem pewnien...

Ten post edytował oximus 27.04.2005, 08:21:39
Go to the top of the page
+Quote Post
SongoQ
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Moze cos ze zlaczeniami LEFT JOIN, niestety nie mam dostepu teraz do MySQLa wiec zapytanie moze nie dzialac prawidlowo.

  1. SELECT *
  2. FROM events a LEFT JOIN events b ON (a.id = b.id + 1)
  3. WHERE a.Prefix = '*' AND b.Text LIKE 'Reset%'
  4. ORDER BY a.Whenl DESC LIMIT 1
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2.  
  3. require_once ('mysql_connect.php');
  4.  
  5. $query='SELECT e.Prefix, e.Text, e.Whenl, e.Crossing_Id,c.Name 
  6. FROM events e, crossing c WHERE (e.Prefix=\"*\" or e.Text LIKE 'Reset%' ) and e.Crossing_Id=c.Id ORDER BY e.Whenl DESC LIMIT 1';
  7. $result = mysql_query($query) or die ('blad:' . mysql_error());
  8. while (list($Prefix, $Text, $Whenl, $Crossing_Id,$Name) = mysql_fetch_row($result)){
  9.  
  10. if (strstr($Text, 'Reset'))
  11.  echo &#092;"ok text=reset\";
  12. else
  13. echo &#092;"prefix=*\"; 
  14. }
  15.  
  16. ?>
Go to the top of the page
+Quote Post
oximus
post
Post #13





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


W 6 linijce jest parse error, chyba chodzi mu o wyrażenie 'Reset%'. Jak wrzucam je w cudzysłów to skrypt działa, ale niezależenie od zmian w bazie pokazuje Prefix=*.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




spróbuj tak
  1. <?php
  2.  
  3. require_once ('mysql_connect.php');
  4.  
  5. $query='SELECT e.Prefix, e.Text, e.Whenl, e.Crossing_Id,c.Name 
  6. FROM events e, crossing c WHERE (e.Prefix=\"*\" or e.Text LIKE '%Reset%' ) and e.Crossing_Id=c.Id ORDER BY e.Whenl DESC LIMIT 1';
  7. $result = mysql_query($query) or die ('blad:' . mysql_error());
  8. while (list($Prefix, $Text, $Whenl, $Crossing_Id,$Name) = mysql_fetch_row($result)){
  9.  
  10. if (strstr($Text, 'Reset'))
  11.  echo &#092;"ok text=reset\";
  12. else
  13. echo &#092;"prefix=*\"; 
  14. }
  15.  
  16. ?>
Go to the top of the page
+Quote Post
oximus
post
Post #15





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


no ok jest blisko, bo jak wywaliłem ten tekstowy syf w kolumnie Text po wyrazie 'Reset' to zaskoczylo...czyli blad musialby byc w linijce 12...tam musiałoby być coś takiego jak 'reset%' ale tak to nie dziala (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




to wkoncu dziala, czy nie dziala, bo nie zajarzylem Twojej wypowiedzi
Go to the top of the page
+Quote Post
oximus
post
Post #17





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Nie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , bo widzisz ja dostaje komunikat do bazy od sterownika. Tam natomiast jest wyraz "RESET" + jakies syfy typu, "Cl","log" (maszynowe bzdety) a to mnie nie interesuje. Mnie interesuje słowo "RESET". Twoj skrypt zadziała gdy ktoś przeprogramuje sterownik, żeby wysyłał czyste słowo "RESET". Niestety to niemożliwe. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


Dziwne, po paru refreshach zaczeło działać...hmmm...dziwne..dzieki Nospor!

Ten post edytował oximus 27.04.2005, 11:20:07
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Oj nie kumam. Ma być samo slowo reset? W czym problem?
... e.Text = \'Reset\' ....
teraz bedzie szukal tylko slowa Reset
Go to the top of the page
+Quote Post
oximus
post
Post #19





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 19.04.2005
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Działa, działa...znowu dziekuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
SongoQ
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Zapytanie jest dokonca niepoprawnie skonstruowane. Napisales powyzej ze jesli pojawi sie okreslony prefix a nastepnie slowo reset to wtedy powinno dzialac. To co CI napisal @nospor nie uwzgledni tego poniewaz zwraca 2 rekordy o okreslonych parametrach nie sprawdza czy sa obok siebie. Mozesz latwo zrobic test wstaw miedzy reset a * jakis rekord i tak naprawde nie powinien tego uwzglednic, a w przypadku powyzej pokaze sie.

Dla zalozenia ze nie jest wazne ustawienie tych rekordow to bedzie dzialac, a jesli to jest wazne to nie zadziala.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 05:20