PHP olur önce bir sonraki yineleme başvurulması

2 Cevap php

Ben "date_posted" "metin", ve "kullanıcı" ile MySQL bir tablo var. Şu anda kullanıcı = Andy bütün metinleri sorgulamak ve bu soruları diyoruz. Diğer kullanıcılardan diğer metin tüm alanları en son soruya cevap vardır.

Ne istiyorum "her metin için kullanıcı = Andy, kullanıcı! = Andy tarihe kadar> sonraki kullanıcı = Andy (soru) metin bulmak" için benzer bir döngü ile, en son bir soru ile bu cevapları ilişkilendirmek için

Bu çok yapmacık görünüyor, ve ben açıkladık gibi kabaca yapılabilir merak ediyorum, ya da ben kendimi ben veri veya bir şey saklamak ediyorum nasıl bazı sorun kaydedebilirsiniz eğer.

Herhangi bir tavsiye için teşekkürler.

EDIT: Ben kullanarak oldum uç sorgularda ekledik.

$url = "http://search.twitter.com/search.json?q=&ands=&phrase=&ors=&nots=RT%2C+%40&tag=andyasks&lang=all&from=amcafee&to=&ref=&near=&within=1000&units=mi&since=&until=&tude%5B%5D=%3F&rpp=50)";
$contents = file_get_contents($url);
$decode = json_decode($contents, true);
foreach($decode['results'] as $current) {
	$query = "INSERT IGNORE INTO andyasks (questions, date, user) VALUES ('$current[text]','$current[created_at]','Andy')";
	mysql_query($query);
}

$url2 = "http://search.twitter.com/search.json?q=&ands=&phrase=&ors=&nots=RT&tag=andyasks&lang=all&from=&to=amcafee&ref=&near=&within=15&units=mi&since=&until=&rpp=50";
$contents2 = file_get_contents($url2);
$decode2 = json_decode($contents2, true);
foreach($decode2['results'] as $current2) {
	$query2 = "INSERT IGNORE INTO andyasks (questions, date, user) VALUES ('$current2[text]','$current2[created_at]','$current2[from_user]')";
	mysql_query($query2);
}

Şu anda nerede olduğumu ve sonra SELECT tarafında, şudur:

    $results = mysql_query("SELECT * FROM andyasks");
$answers = mysql_query("SELECT * FROM andyasks WHERE 'user' != 'Andy'");
while($row = mysql_fetch_array($results))
{
	if ($row['user'] == 'Andy') {
    print(preg_replace($pattern, $replace, "<p>".$row["questions"]."</p>"));
}
}
while($row = mysql_fetch_array($answers))
{
    print(preg_replace('/@amcafee/', '', "<p>".$row["questions"]."</p>"));
}

2 Cevap

Ne akılda var, ben inanıyorum, SELECT, ORDER BY, LIMIT, vb JOIN veya iç içe ince kullanımı ile yapılabilir Eğer tahmin gibi, ama, bu "müthiş yapmacık" ve büyük olasılıkla oldukça yavaş olacaktır.

Eğer şüpheli gibi cevaplar için, onlar (bu olabilir cevap veriyorsun sorunun birincil anahtarı olan, tabloya bir sütun, ekledi eğer, SELECT anda kendinizi bir sürü sorun kaydetmek istiyorsunuz kolaylıkla) kullanıcı eşit Alex ile son giriş beri, INSERT anda elde. Sonra alma daha kolay olurdu!

Eğer şema bu şekilde değiştirmek, ancak SQL ile yardıma ihtiyacınız varsa, pls yorum veya belirtmek için cevap düzenleyebilir ve ben (Zorlandığınız eğer benzer, ben takip etmek mutlu olurdu takip mutluluk duyarız Bu şema ile ve "müthiş yapmacık" SQL gerekir - Ben sadece uygular iki olasılıktan hangisinin bilmiyorum -!).

Edit: şema değişti beri, INSERT (formunu kullanarak: Eğer bağlamak gerekir parametrelerini belirtmek için isim) olabilir:

INSERT IGNORE INTO andyasks
  (questions, date, user, answering)
  SELECT :text, :created_at, :from_user,
    IF(:from_user='Andy', NULL, aa.id)
  FROM andyasks AS aa
  WHERE user='Andy'
  ORDER BY date DESC
  LIMIT 1

yani: kullanım INSERT INTO ... SELECT' to do a query-within-insertion, which picks the latest post by Andy. I'm assuming you do also have a primary key id `şeylerin normal bir düzenlemedir otomatik artış, var.

Daha sonra bir soruya verilen tüm cevaplar almak için, sadece kimin answering özellik bu soru sorulacak id eşittir satırları seçmeniz gerekir.

Ben doğru anlamak gibi bir şey istiyorum:

$myArr = array("bob","joe","jennifer","mary");
while ($something = next($myArr)) {
   if ($nextone = next($myArr)) {
       //do Something
       prev($myArr)
   }

}

http://jp2.php.net/next görmek hem de prev ilgili bölümleri, reset ve güncel