Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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


--------------------
A T A R I
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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.


--------------------
A T A R I
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))


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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


--------------------
A T A R I
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ć


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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


--------------------
A T A R I
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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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ś 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:

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


--------------------
A T A R I
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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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=*.


--------------------
A T A R I
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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 smile.gif


--------------------
A T A R I
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 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. smile.gif


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

Ten post edytował oximus 27.04.2005, 11:20:07


--------------------
A T A R I
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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ę smile.gif


--------------------
A T A R I
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 08:01