2012-01-07 3 views
1

Я работаю в сценарии опроса, у меня есть две таблицы {hs_questions_q} {hs_answers_ans}, первая из которых сохранила вопрос, а вторая сохранила свои ответыSELECT инструкция sql, которая извлекает одну строку из таблицы и многие связанные строки из другой таблицы

я использовал SQL заявление, чтобы получить данные

SELECT * FROM hs_questions_q INNER JOIN hs_answers_ans ON id_q=idq_ans WHERE active_q ='1' and home_q ='1' ORDER BY id_q DESC limit 1 

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

+0

выберите * Форма hs_answer_ans где idq_ans в (выберите id_q из hs_questions_q active_q = '1' и home_q = '1' ORDER BY id_q предел DESC 1) –

+0

@RajatSinghal Спасибо за ваш ответ, я думаю, что это получить более ближе от решения , но, похоже, есть ошибка в заявлении – ahmedsaber111

ответ

1

Это вернет 1 строку для каждого вопроса в таблице не как питы строки ответов:

Я предполагаю структуру:

hs_questions_q (id,desc)

hs_answers_ans(id,desc)

SELECT question.desc, group_concat(hs_answers_ans.desc SEPARATOR '#') 
FROM (select * 
      from hs_questions_q 
      where active_q ='1' and home_q ='1' ORDER BY id_q DESC limit 1) question 
INNER JOIN hs_answers_ans ON id_q=idq_ans 
group by question.id 

result: 
question1 | Answer1#Answer2#Answer3 

Позже вы можете разбить его на «#» после получения результата на стороне php.

Вы можете получить усеченные ответы, если он превышает допустимый размер пакета. Вы можете решить ее,

SET SESSION group_concat_max_len = 6000(any threshold); 
+0

отлично, я попробую это, но вы можете объяснить больше, что положить вместо разделителя #, и что (вопрос) перед операцией внутреннего соединения, вы имеете в виду (hs_question_q) – ahmedsaber111

+0

да, это означает только таблицу 'hs_question_q'. «вопрос» использовался как псевдоним для таблицы «hs_question_q». Хорошее соглашение - писать с предложением «AS» i.e Например: from() в качестве вопроса. i последней версии, если mysql, хотя и не упоминает, что он будет принимать как псевдоним, но в более ранней версии мы должны были упомянуть, что иначе выкинет ошибку. –

+0

Для разделителя вы можете выбрать любого персонажа. Ибо, если в ответе есть какая-либо возможность #, то измените на любой другой символ u, который, по вашему мнению, не будет использоваться в ответах или используйте '###'. Возможность использования 3 раза редка. –

0

Я думаю, что это примерно то, что вы ищете:

SELECT * FROM 
     (select * 
      from hs_questions_q 
      where active_q ='1' and home_q ='1' ORDER BY id_q DESC limit 1) question 
INNER JOIN hs_answers_ans ON id_q=idq_ans 

Я не знаю, принадлежат ли active_q и home_q на вопрос таблицу или ответы

+0

спасибо за это усилие, active_q и home_q принадлежит к таблице вопросов, в вашем запросе я понимаю все, что вы пишете, хотя запрос извлекает все данные из таблицы ответов и создает вопрос строка таблицы, полученная с каждой строки, возвращенной из ответной таблицы – ahmedsaber111

0

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

Я бы выбрал вопрос, а затем использовал идентификатор из вопроса, чтобы получить все ответы отдельно.

+0

отлично, также я бы сделал это, но мне нужно поставить опрос на домашней странице, так как я могу получить ответы из таблицы ответов через $ _GET var без передачи var к url ​​ – ahmedsaber111

+0

Это было бы очень легко сделать с ajax ... Я бы предложил нам jQuery, если вы еще не ... http://api.jquery.com/jQuery.ajax/ – jason

+0

Спасибо, я буду держать его, чтобы попробовать – ahmedsaber111

0
select * from hs_answer_ans where idq_ans in (select id_q from hs_questions_q where active_q ='1' and home_q ='1' ORDER BY id_q DESC limit 1) 

К сожалению некоторой опечатка там в комментариях ... :)

+0

К сожалению, я получаю эту ошибку {Эта версия MySQL еще не поддерживает «LIMIT & IN/ALL/ANY/SOME subquery»} – ahmedsaber111

+0

MySQL Версия: 5.5.8 – ahmedsaber111

+0

В в этом случае вы можете либо перейти на альтернативную ссылку по этой ссылке: http://stackoverflow.com/questions/3537999/mysql-alternative-for-limit-inside-subquery-in-mysql-5-1-49 –

0

Этого запрос должен дать вам желаемый результат:

SELECT * 
FROM `hs_questions_q` 
INNER JOIN `hs_answers_ans` ON `id_q` = `idq_ans` 
WHERE `idq_ans` = (
    SELECT MAX(`id_q`) 
    FROM `hs_questions_q` 
    WHERE `active_q` ='1' 
    AND `home_q` ='1' 
    ); 

Надеется, что это помогает!

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