2015-10-23 2 views
0

Я новичок в PHP, но имею код ниже. По сути, он должен загрузить некоторые значения в массив из SQL-запроса, а затем использовать значения в массиве для вывода из другого запроса. Петля внутри цикла.Как отлаживать код PHP/SQL, который больше не работает?

Как ни странно это работало сначала, но теперь нет. Если я отделяю два запроса, они все равно работают нормально. Таким образом, нет проблем с базой данных и сообщений об ошибках. Я просто хочу знать, нормально ли использовать этот метод, поскольку он кажется самым простым. Или мне нужно отделить петли?

$sql = 'SELECT menuID FROM explore_section1 WHERE menukey="sea-ovr"'; 
$place = $conn->query($sql); 
while($row = $place->fetch_assoc()) { 
    $sql2 = 'SELECT url, name FROM explore_items WHERE menuID="'.$row["menuID"].'"'; 
    $result = $conn->query($sql2); 
    while($row2 = $result->fetch_assoc()) { 
    echo '<li><a href="'.$row2["url"].'">'.$row2["name"].'</a></li>'; 
    }  
} 

Спасибо!

+0

В вашем SQL-запросе вам будет лучше служить ['INNER JOIN'] (https://dev.mysql.com/doc/refman/5.0/en/join.html). Вы должны иметь возможность присоединиться к 'menuID' и использовать только 1 запрос. – HPierce

ответ

1

Я не вижу никаких причин для 2-запросов, так просто:

$sql = 'SELECT s.menuID, i.url, i.name 
     FROM explore_section1 s 
     LEFT JOIN explore_items i 
     ON s.menuID = i.menuID 
     WHERE s.menukey="sea-ovr"'; 
if($result = $conn->query($sql)) { 
    while($row = $result->fetch_assoc()) { 
     echo '<li><a href="'.$row["url"].'">'.$row["name"].'</a></li>'; 
    } 
} else { 
    echo "Error:". $conn->error); 
} 

UPDATE Запрос должен работать: http://sqlfiddle.com/#!9/76f2f/1

+0

Не работает с этим. Если я запустил первый запрос –

+1

Что? * не работает * что это значит? какая у вас ошибка? какое неожиданное поведение? – Alex

+0

Не работает с этим.Если я запускаю первый запрос SELECT menuID FROM expl_section1 WHERE menukey = "sea-ovr"; Выход: menuID: 'sea-hgh', 'sea-q-a', 'sea-rts'. Если я поместил одно из этих значений в следующий запрос. SELECT url, name FROM expl_items WHERE menuID = "sea-rts"; Дает правильный выход. Ничего в журналах ошибок. Ошибок не возникает, если я ошибаюсь. Извините, что неожиданное поведение - просто пустой вывод. Здесь пусто. –

0

OK, после нескольких часов игры. У MySQL есть странная вещь. Я импортировал данные, как почти везде советует, используя следующие запросы структуры:

LOAD DATA LOCAL INFILE 'C:/data.csv' INTO TABLE explore_items 
FIELDS TERMINATED BY ',' 
ENCLOSED BY ';' 
LINES TERMINATED BY '\n' 
(field1, field2); 

Это выглядело работать нормально и запросы работают при использовании только один стол, но только вы присоединиться к ним, они не работают. СТРАННЫЙ!! Способ, которым я должен импортировать данные, соответствует инструкциям по импорту (найденным в другом потоке):

У phpMyAdmin есть необходимый инструмент для обработки импорта CSV. Вот шаги, чтобы следовать:

  • подготовить файл CSV, чтобы иметь поля в том же порядке, что и поля таблицы MySQL

  • удалить строку заголовка из CSV (если таковые имеются), так что только данные есть в файле перейти к интерфейсу PhpMyAdmin выберите таблицу в меню слева

  • нажмите кнопку импорт в верхней

  • браузера CSV файл

  • выберите опцию «CSV с помощью LOAD DATA»

  • войти «» в „полях оканчивающихся“

  • введите имена столбцов в том же порядке, как они находятся в таблице БД

  • нажмите кнопку go, и все готово.

Спасибо @Alex за все ваше время на этом!

+0

Если ответ Алекса и помощь были наиболее полезными, вы бы согласились принять их ответ? Чтобы сделать это, нажмите на галочку слева от их ответа, чтобы он стал зеленым - это то, как мы отмечаем вопрос, разрешенный здесь, и он вознаграждает помощника с несколькими точками репутации. – halfer

+0

Привет @halfer. Нет ничего плохого в моем оригинальном PHP и методе Alexs, безусловно, более аккуратном, чем мой оригинал, но проблема здесь в том, что MySQL, на который ответ выше. Принят. Не могли бы вы дать мне ответ на мой ответ, хотя это ответ на проблему. –

+0

Спасибо, что приняли другой ответ. Однако имейте в виду, что мы пытаемся отказать в явных запросах на upvotes здесь - вы обнаружите, что хорошие сообщения будут собирать реплики полностью органично в долгосрочной перспективе. Придерживайтесь и отвечайте еще на несколько, и ваш представитель скоро увеличится - это вызывает привыкание ':-)'. – halfer

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