Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+mysql] Pytanie o wyciągnięcie danych z zapytania przed while
tryme
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 5.12.2005

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


Witam Serdecznie,

Chciałem Was zapytać czy istnieje możliwość aby w poniższym kodzie

  1. <?php
  2. $result = $db->query('SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_s
    etting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.po
    ster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edit
    ed, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM '
    .$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id='.$id.' ORDER BY p.id LIMIT '.$start_from.','.$pun_user['disp_posts'], true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
  3.  
  4. while ($cur_post = $db->fetch_assoc($result))
  5. {
  6. ...
  7. ?>

wstawić tuż przed pętlą while kod wyciągający pierwszą wiadomość
  1. <?php
  2. $cur_post['message'];
  3. ?>

tak aby potem pętla while zaczęła czytać dane od tej pierwszej wiadomości a nie od drugiej?

Dziękuję za pomoc.

Ten post edytował tryme 26.02.2008, 11:10:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Grzyw
post
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


Możesz to zrobić na przykład tak:

  1. <?php
  2. $result = $db->query('......');
  3.  
  4. $first = true;
  5.  
  6. while ($cur_post = $db->fetch_assoc($result))
  7. {
  8. if ($first) 
  9.  {
  10.  $currentMsg= $cur_post['message'];
  11.  $first=false;
  12.  continue;
  13.  }
  14.  $mgs[] = $cur_post['message'];
  15. }
  16. ?>


Ten post edytował Grzyw 26.02.2008, 11:29:02
Go to the top of the page
+Quote Post
nowotny
post
Post #3





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


A w jakim celu...?

W pętli robisz sobie ifa i dodajesz zmienną liczącą iteracje pętli...

  1. <?php
  2. $i=0;
  3. while ($cur_post = $db->fetch_assoc($result))
  4. {
  5. if($i==0){...}
  6. else {...}
  7. $i++;
  8. ...
  9. ?>
Go to the top of the page
+Quote Post
tryme
post
Post #4





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 5.12.2005

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


Dokładnie to chcę wyciągnąć dane z pierwszego posta aby wrzucić je jako meta description strony.

Nie mogę zrobić ifa ponieważ tuż przed pętlą while wczytywany jest header w który to właśnie muszę umieścić description.

Musi to mniej więcej wyglądać tak:

  1. <?php
  2. $result = $db->query('......');
  3.  
  4. // miejsce na magiczny kod który wyciągnie mi dane z pierwszego posta (message)
  5.  
  6. require 'header.php';
  7.  
  8. while ($cur_post = $db->fetch_assoc($result))
  9. {
  10. ....
  11. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




oj... pomysl troche. skoro kod w petli wyciaga kolejne rekordy, to wywal go poza petle a dostaniesz pierwszy:
  1. <?php
  2. $result = $db->query('......');
  3.  
  4. // miejsce na magiczny kod który wyciągnie mi dane z pierwszego posta (message)
  5. $cur_post = $db->fetch_assoc($result);//twoj pierwszy rekord
  6.  
  7. require 'header.php';
  8.  
  9. //a tu poleci od drugiego
  10. while ($cur_post = $db->fetch_assoc($result))
  11. {
  12. ....
  13. }
  14. //jak chcesz by ta petla poleciala od pierwszego, to while musisz przeniesc na dol
     (patrz manual rozne skladnie while)
  15. ?>
Go to the top of the page
+Quote Post
nowotny
post
Post #6





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


To sobie zrób tak:
  1. <?php
  2. $i=0;
  3. while ($cur_post = $db->fetch_assoc($result))
  4. {
  5. if($i==0){
  6. ...
  7. require 'header.php';}
  8. else {...}
  9. $i++;
  10. ...
  11. ?>

Albo podobnie...


Cytat(nospor @ 26.02.2008, 11:48:51 ) *
//jak chcesz by ta petla poleciala od pierwszego, to while musisz przeniesc na dol
(patrz manual rozne skladnie while)

To i tak nic nie da bo pierwszy mysql_fetch_assoc przesunie wskaźnik na drugi wiersz wyników...

Ten post edytował nowotny 26.02.2008, 11:52:52
Go to the top of the page
+Quote Post
tryme
post
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 5.12.2005

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


Problem rozwiązany.

Bardzo dziękuję wszystkim za pomoc. W szczególności użytkownikowi nospor, który podał rozwiązanie którego długo szukałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował tryme 26.02.2008, 12:00:33
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




Cytat
To i tak nic nie da bo pierwszy mysql_fetch_assoc przesunie wskaźnik na drugi wiersz wyników...
a wlasnie ze da. Sadzilem ze akurat Ciebie nie bede musial odsylac do manuala, ale jednak trzeba:
http://pl2.php.net/manual/pl/control-structures.do.while.php
milej lektury i zastanowienia sie jeszcze raz nad podanym przezemnie rozwiazaniem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nowotny
post
Post #9





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(nospor @ 26.02.2008, 12:02:34 ) *
a wlasnie ze da.

Ok, da jeśli w pierwszej iteracji do..while odwołamy się do zmiennej $cur_post wywołanej przed pętlą... jednak ja odwołuję się do twojego zdania:
Cytat
//jak chcesz by ta petla poleciala od pierwszego, to while musisz przeniesc na dol

które jest nieprawdą, bo nawet jeśli while przeniesiemy na dół to tak czy siak zacznie odczytywanie od drugiego wiersza wyniku ponieważ pierwsze użycie fetch_assoc przesunie wskaźnik na drugi wiersz i tego nie przeskoczysz...
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




ech czlowieku malej wiary (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Nie wiem, moze nie jasno sie wyrazilem, ale chodzilo mi o taki kod:
  1. <?php
  2. $cur_post = $db->fetch_assoc($result);//twoj pierwszy rekord
  3.  
  4. require 'header.php';
  5.  
  6. do
  7. {
  8. // a tu robimy cos z $cur_post
  9. } while ($cur_post = $db->fetch_assoc($result));
  10. ?>

I dziala jak mowilem: while na dole, rekordy od pierwszego.
Go to the top of the page
+Quote Post
nowotny
post
Post #11





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Wiem że działa... w ogóle nie o to chodzi...

Chodzi o to że w swojej wypowiedzi imputowałeś że fakt przeniesienia while na dół powoduje jakieś automagiczne rozpoczęcie pobierania wyników od pierwszego wiersza mimo wcześniejszego użycia fetch_assoc co, jak oboje wiemy, nie jest prawdą... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował nowotny 26.02.2008, 12:33:40
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




w przykladzie co ci podalem w poprzednim poscie jest najprawdziwsza prawda.

A ty w tej chwili czepiasz sie slowek, choc nawet nie wiem czemu. Powiedzialem ze danie while na dole spowoduje w tym przykladzdie iteracje od pierwszego rekordu i tak jest. A to ze db->fetch_assoc($result) w tym while bedzie pobierac rekordy od drugiego to zupelnie inna bajka. Skonczmy wiec juz ten "dziwny spor".
Go to the top of the page
+Quote Post

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: 21.12.2025 - 22:10