2013-05-01 3 views
0

У меня есть таблица, в которой хранятся данные об экзаменах. Каждый экзамен, введенный в эту таблицу, вводится как пара людей, то есть два человека на экзамен, выполняемые таким образом, чтобы у вас был один экзамен, два человека. У каждого человека свой уникальный идентификатор для каждого экзамена, но каждая пара имеет значение, называемое partner_id, что для них одинаково.выберите несколько значений из одного условия (PHP/MySQL)

То, что я пытаюсь сделать, это извлечь значения partner_id из этой таблицы, чтобы затем использовать эти значения, чтобы найти партнеров указанного человека и показать/эхо на странице информацию о результатах экзамена каждого партнера с этим человеком прошел экзамен.

То, что я пытался до сих пор:

$partner_ider = mysql_query("SELECT partner_id as value1 from exam WHERE Student_email='[email protected]'"); 
$row1 = mysql_fetch_array($partner_ider); 

while($row1 = mysql_fetch_array($partner_ider)) 
{ 
    echo $row1['value1']; 
} 

И это:

$result = mysql_query("SELECT * from exam WHERE Student_email='[email protected]'"); 
$row = mysql_fetch_array($result); 

while ($row = mysql_fetch_array($result)) 
{ 
    echo $row['partner_id']; 
} 

В результате они дали бы 2 для этой электронной почты из которых имеет две записи в таблице экзамена, какие Я искал 1, 2, которые являются значениями двух partner_ids для записей этого электронного письма. Когда я меняю адрес электронной почты кому-то другому, у кого только есть, он ничего не возвращает.

То, что я хотел бы сделать с результатом 1, 2, - использовать эти значения, чтобы выбрать всех других людей, кроме оригинального человека ([email protected]), и показать свои данные из этой таблицы.

Что я прошу, так как я буду делать это, потому что раньше не делал ничего подобного?

ответ

1

В обоих фрагментах кода у вас есть строка 2 mysql_fetch_array(), которой не должно быть. Он извлекает строку, помещает ее в строку $ row1 и увеличивает внутренний указатель.

Когда вы вызываете mysql_fetch_array() в свое время, он извлекает вторую запись, затем третью и т. Д., Пока все строки не будут обработаны.

В обоих примерах следует удалить вторую строку и повторить попытку.

$partner_ider = mysql_query("SELECT partner_id as value1 from exam WHERE Student_email='[email protected]'"); 
//$row1 = mysql_fetch_array($partner_ider); 

while($row1 = mysql_fetch_array($partner_ider)) 
{ 
    echo $row1['value1']; 
} 

Если ваша структура таблицы выглядит следующим образом:

  • ID
  • student_id
  • student_name
  • student_email
  • student_whatever
  • partner_id

Запрос SQL будет выглядеть

SELECT Student_email FROM exam WHERE partner_id IN (SELECT partner_id FROM exam WHERE student_Email = '[email protected]') AND Student_email <> '[email protected]'; 

Но вы должны действительно разбить таблицу. У вас есть две сущности (студент и экзамен) и таблица соединения.

Student

  • идентификатор
  • имя
  • электронной

экзамен

  • идентификатор
  • имя
  • (другие данные экзамена)

StudentGroup

  • exam_id
  • student_id
  • группа
+0

Спасибо, что работали. Как я могу использовать те значения, которые для [email protected] были бы 12, чтобы выбрать из таблицы экзаменов строку партнеров экзамена до такой степени, что я мог бы повторить их на странице? – madman

+0

Я получаю SQL-ошибку Subquery возвращает более 1 строки. Структура таблицы более или менее такова, как вы намекали. То, что я хочу сделать, - это использовать 12, чтобы выбрать все поля из двух в этом случае партнера по экзамену [email protected] У одного человека может быть еще много партнеров или только один в таблице экзаменов. Надеюсь, что это немного облегчит его. Спасибо за помощь. – madman

+0

Ох. Я думал, что у студента только один партнер. Тогда у вас, вероятно, есть поле exam_id в вашей таблице. Вы хотите, чтобы все партнеры по экзамену у кого-то были, или только его партнеры для одного экзамена? – Nicolas

Смежные вопросы