За последние 24 часа нас посетили 62934 программиста и 1746 роботов. Сейчас ищут 787 программистов ...

Вытаскиваем данные из одной таблицы, по другой таблице

Тема в разделе "PHP для новичков", создана пользователем DemiuS, 11 фев 2016.

  1. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Здравствуйте, не могу разобраться, много перерыл.
    Пишу сейчас свой модуль платных тестов для одного движка, написал добавление тестов и вопросов отдельно.
    Интересует, вот создал я тест с ID 20, а вопросам дал в нужной колонке ID_TEST 20, как мне достать все вопросы именно с ID 20, при это еще и вывести их в инпуты вподрят.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    И в чем затык? Ты говоришь, мне нужны которые номер двадцать, выбираешь из бд все, которые номер двадцать. Победа же.
     
  3. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Но их потом нужно вывести именно с вопросом 20,толи туплю уже вторые сутки, толи не знаю.
    Вот есть страница теста(еще пишу), нужно чтобы вывелись ответы и сам вопрос 20 ID.
    Какой запрос есть, чтобы именно вытащить все ID_TEST 20?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    выбери интересующие тебя вопросы. По их айдишнику выбери все из второй таблицы через WHERE `test` IN (20, 21, 45, 100...). Потом сгруппируй в новый массив $arr[$row['test']] = $row; и выводи. Канэц.
     
  5. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Понял, сейчас попробую, просто PHP помню отлично, больше двух лет не работал с сайтами, а вот с запросами по базе и связкой их с PHP, проблемы))
     
  6. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Что же вы прогали только на PHP ?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тут два разных запроса полюбас
     
  8. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Код (PHP):
    1. function testlist ()
    2. {
    3.     $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME);    
    4.     $mysqli->query("SET NAMES utf8");
    5.     if ($result = $mysqli->query("SELECT * FROM dle_tq_test ORDER BY id DESC LIMIT 5")) {
    6.         while( $row = mysqli_fetch_array($result) )
    7.             { 
    8.                 printf("%s (%s)\n", $row['id'], $row['name']);
    9.             }
    10.     }
    11.     else
    12.     {
    13.         return 0;
    14.     }
    15. }
    16.  
    Накатал такую кракозябру, но работает странно, подскажите, как правильно в шаблоне в движок вывести ответ.
    Вывожу так - $testlist = testlist();, но получается вверху страницы.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так у тебя ж вывод внутри функции происходит, а она ничего не возвращает обычно
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты её вызывай там где надо вставить этот текст и всё
     
  11. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Ну я сначала её глобально вызываю в скрипте как переменную, а потом уже в нужном месте вставляю.
    Это по своим старым работам делаю, там всё работало, только в более больших масштабах, а вот в уменьшенном варианте, как-то не хочет...

    Думаю все функции в одном файле сделать, через вызов.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну тогда тупо не выводи ничего, а возвращай =)
     
  13. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    А вот тут уже вопрос хороший задам, как там array массив вывести через return к примеру, я пробовал, он мне возвращает "array"
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Тебе не массив надо возвращать, а строку.
     
  15. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Код (PHP):
    1. function testlist ()
    2. {
    3.     $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME);    
    4.     $mysqli->query("SET NAMES utf8");
    5.     $result = $mysqli->query("SELECT * FROM dle_tq_test");
    6.         while( $row = mysqli_fetch_array($result) )
    7.             { 
    8.                 $html = "<b>Номер Теста:</b> ".$row['id']." | <b>Название Теста:</b> ".$row['name']." | <b>Цена Теста:</b> ".$row['cost'];
    9.                 return $html;
    10.             }
    11. }
    Намудрил что-то такое, теперь опять же, выводится только одна запись, как я понимаю, while не правильно у меня работает...
    Если я прав, то это из за retutn, но через echo, выводит строго вверху сайта и не помню как это устранить...
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сначала скопи в переменную весь вывод, а то у тебя на первой же строке всё и заканчивается.
     
  17. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Вооот, а как это сделать, этого я не знаю, гугл не помог)
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    гугль, дай этому парню что он хочет. трах-тибидох-тибидох!

    Добавлено спустя 4 минуты:
    а еще есть волшебная конкатенация строк:
    Код (PHP):
    1. $s = 'трах-';
    2. $s = $s . 'тибидох-';
    3. $s .= 'тибидох';
    4. echo $s; 
    "." и в цикле будет работать
    Код (PHP):
    1. $array = ['трах-', 'тибидох-', 'тибидох'];
    2. $s = '';
    3. foreach ($array as $x) {
    4.   $s .= $x;
    5. }
    6. echo $s; 
     
  19. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    artoodetoo а не проще для array
    implode ?? (:)
     
  20. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Код (PHP):
    1. function testlist ()
    2. {
    3.     $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME);    
    4.     $mysqli->query("SET NAMES utf8");
    5.     $result = $mysqli->query("SELECT * FROM dle_tq_test");
    6.         while($row = mysqli_fetch_array($result))
    7.             { 
    8.                 $html .= "<b>Номер Теста:</b> ".$row['id']." | <b>Название Теста:</b> ".$row['name']." | <b>Цена Теста:</b> ".$row['cost']."<br>";
    9.             }
    10.     return $html;
    11. } 
    Сделал так, работает отлично, но это как я думаю со стороны адекватного кода, не очень))
     
  21. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    p@R@dox 55RU, мой пример реально выглядел бы лучше с implode, но у ТСа while(fetch()) , а не перебор массива.
     
  22. DemiuS

    DemiuS Новичок

    С нами с:
    11 фев 2016
    Сообщения:
    33
    Симпатии:
    0
    Адрес:
    Киев
    Ребята, а передавать переменную через сессию в другой файл, адекватно?
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    в другой запрос. мысли правильными категориями )))
    зависит от задачи. если ты можешь сделать без этого — сделай.
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    иногда я юзаю конкатенацию, иногда коплю в массив и имплодю. и тпкк и эдак хорошо. какой способ быстрее я не знаю, но подозреваю, что конкатенация.

    Добавлено спустя 1 минуту 24 секунды:
    я два дня вёл парня к умению формулировать, осозновать и находить...

    Добавлено спустя 2 минуты 43 секунды:
    в другой файл того же запроса передавать ничего не нужно - ему и так всё глобальное доступно. Но дело не в этом. В принципе не стоит мыслить такими категориями. Нужно понимать плюсы и минусы и принимать решение. Сессии обычно живут двадцать минут, кстати.
     
  25. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    прости :(