2013-04-17 4 views
0
$sqlCommand2 = "SELECT blogid FROM blogtags WHERE tag='$pageid'"; 
$query2 = mysqli_query($myConnection, $sqlCommand2) or die (mysqli_error()); 
while ($row = mysqli_fetch_array($query2)) { 
    $selectedtag = $row['blogid']; 
} 

Это SQL SELECT должен дать $ selectedtag значения 1,2,3, но это только дает значение 3. Последняя строка, которая равна PageId. Может ли кто-нибудь понять, почему он не тянет все ряды и только последний?Выбор нескольких строк PHP/MySQL

+1

пожалуйста, объясните логику, как же призывающую «$ selectedtag = $ строки [„blogid“]» три раза результат в этой переменной, содержащей значение 3? вы считаете, что переменная является стеком? сумка? – cernunnos

ответ

1

Это связано с тем, что вы присваиваете значения переменной внутри цикла. Таким образом, последнее значение перезаписывает все остальные значения. Вместо этого используйте массив.

изменение $selectedtag = $row['blogid']; к $selectedtag[] = $row['blogid'];

+0

Это здорово, но как я могу использовать значение, которое находится в $ selectedtag []? Я хочу использовать полученные значения, чтобы вытащить сообщения из другой таблицы: $ sqlCommand = "SELECT blogid, blogtitle, content, blogtime, category, blogseourl, author FROM blog WHERE blogid = '$ selectedtag'"; – Newcastlefan

+0

@ Урбане да, это :) – raidenace

+0

Хорошо спасибо @Raidenace. Я изучу это, знаете ли вы о каких-либо сайтах с учебниками о том, как закодировать массив и создать запятую конкатенированную строку? Извините, я довольно новичок в php. – Newcastlefan

1

попробуйте:

$selectedtag = array(); 
while ($row = mysqli_fetch_array($query2)) { 
    $selectedtag[] = $row['blogid']; 
} 

print_r($selectedtag); 
0

изменение:

$sqlCommand2 = "SELECT blogid FROM blogtags WHERE tag='$pageid'"; 
     $query2 = mysqli_query($myConnection, $sqlCommand2) or die (mysqli_error()); 
        while ($row = mysqli_fetch_array($query2)) { 
        $selectedtag[] = $row['blogid']; 
        } 

$ selectedtag [] < --put значения в массиве;

1

Вы сохраняете переписку $selectedtag со значением blogid вашей последней итерации строк.

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

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

Если вы хотите искать блоги с собранными идентификаторами, вам будет лучше, создав более крупный запрос вместо поиска для идентификатора блога id и поиска в блогах.

Вы могли бы сделать что-то вроде этого:

SELECT id, title, content, author, date 
FROM blogs 
WHERE id IN 
    (SELECT blogid FROM blogtags WHERE tag ='$pageid') 

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

Удачи вам!

0

Предложение WHERE в вашем запросе - это то, что его останавливает.

Если переменная $pageid имеет значение 3, то запрос вычисляет:

SELECT COLUMN blogid FROM TABLE blogtags ONLY WHERE THE COLUMN tag HAS THE VALUE OF 3 

Так в основном, запрос делает именно то, что он говорит.

Если вы хотите, чтобы выбрать предыдущие две строки, то вы должны быть изобретательны с ИНЕКЕ:

SELECT blogid FROM blogtags WHERE tag <= $pageid AND tag > $pageid - 3 

Это будет выбрать все, что имеет тег, 3 или меньше и больше чем 3 - 3 = 0;

Таким образом, метка может быть 3, 2 или 1.

EDIT

Возможно, я неправильно понял вопрос, но я оставлю свой ответ здесь упаковывают это помогает кому-то еще, кто натыкается на него.

0

Закройте mysqli и используйте PDO. В нем есть все, что нужно:

$stm = $pdo->prepare("SELECT blogid FROM blogtags WHERE tag=?"); 
$stm->execute(array($pageid)); 
$rows = $stm->fetchAll(PDO::FETCH_COLUMN, 0); 
Смежные вопросы