Ссылка на следующую итерацию до того, как она произойдет в PHP - PullRequest
0 голосов
/ 12 июня 2009

У меня есть таблица в MySQL с «text», «date_posted» и «user». В настоящее время я запрашиваю весь текст у пользователя = Энди и вызываю эти вопросы. Все остальные текстовые поля других пользователей являются ответами на самый последний вопрос.

Я хочу связать эти ответы с самым последним вопросом с помощью цикла, похожего на «для каждого текста, где пользователь = Энди, найти текст, где пользователь! = Энди до даты»> следующий пользователь = Энди (вопрос) «

Это кажется ужасно надуманным, и мне интересно, можно ли это сделать примерно так, как я обрисовал, или я могу избавить себя от некоторых проблем с хранением данных или чего-то подобного.

Спасибо за любой совет.

РЕДАКТИРОВАТЬ: я добавил в запросы вставки, которые я использовал.

$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);
}

А затем на стороне SELECT, вот где я сейчас нахожусь:

    $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 ]

2 голосов
/ 12 июня 2009

То, что вы имеете в виду, я думаю, можно сделать с тонким использованием JOIN или вложенных SELECT, ORDER BY, LIMIT и т. Д., Но, как вы предполагаете, это будет "ужасно надуманным" "и, вероятно, довольно медленно.

Как вы подозреваете, вы бы избавили себя от многих проблем в SELECT раз, если бы добавили в таблицу столбец, в котором, для ответов, есть первичный ключ вопроса, на который они отвечают (это может быть легко получено в INSERT раз, так как это последняя запись с пользователем равным Алексу). Тогда поиск будет проще!

Если вы можете изменить свою схему таким образом, но вам нужна помощь с SQL, пожалуйста, прокомментируйте или отредактируйте свой ответ, чтобы указать это, и я буду рад продолжить (аналогично, я был бы рад продолжить, если вы Вы застряли в этой схеме и нуждаетесь в «ужасно надуманном» SQL - я просто не знаю, какая из этих двух возможностей применима! -).

Редактировать: поскольку схема изменилась, INSERT может быть (используя форму: имя, чтобы указать параметры, которые вы должны связать):

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

Т.е.: использовать 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` - это автоинкремент, который является нормальным расположением вещей.

Позже, чтобы получить все ответы на заданный вопрос, вам нужно только выбрать строки, атрибут answering которых равен id.

этого вопроса.
0 голосов
/ 12 июня 2009

Если я вас правильно понимаю, вы хотите что-то вроде:

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

}

см. http://jp2.php.net/next, а также разделы по предыдущему, сбросу и току

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...