Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Выборка из 2 баз данных


Автор: Dima85 9.4.2014, 00:03
Код

$rows = mysql_query("SELECT PinName, PinID FROM `Pineral`");
$rows2 = mysql_query("SELECT PinUrl, PinUrlID FROM `Pineralurl`");

while ($stroka = mysql_fetch_array($rows)){
    $i=$stroka['PinID'];
    echo'<td>' . $stroka['PinName'] . '</td>';

while ($stroka2 = mysql_fetch_array($rows2)){
    if ($i == $stroka2['PinUrlID']) {
        echo'<td>' . $stroka2['PinUrl'] . '</td>';
    }
}
}


Необходимо сделать следующее. Если $i из первой базы == $stroka2['PinUrlID'] из второй базы. То вывести $stroka2['PinUrl'] из второй базы и опять продолжить поиск по первой базе, есть опять будут найдены совпадения опять вывести $stroka2['PinUrl'] и так до конца.

Сейчас в выше написанном мною коде второй while почему-то срабатывает только 1 раз. Подскажите пожалуйста что мне делать.

Автор: _zorn_ 9.4.2014, 03:27
Код

$rows = mysql_query("SELECT * FROM Pineral, Pineralurl WHERE Pineral.PinID=Pineralurl.PinUrlID");
while($line = mysql_fetch_assoc($rows))
{
print_r($line);
}

В этом случае, если во второй таблице не будет записи(ей) с PinUrlID=PinID из первой таблицы, в выборку не попадет запись из первой таблицы.
Если нужно, чтобы попадало - кури LEFT JOIN

Автор: igorold 9.4.2014, 06:01
Чтобы твой код срабатывал не один раз, тебе надо сделать что-то типа:

Код

$rows = mysql_query("SELECT PinName, PinID FROM `Pineral`");
$rows2 = mysql_query("SELECT PinUrl, PinUrlID FROM `Pineralurl`");
$list = mysql_fetch_array($rows2);


и второй цикл
while ($stroka2 = mysql_fetch_array($rows2))
заменить на
foreach ($list as $stroka2)

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

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Выборка-из-2-баз-данных-id534464bcae2015fa6e8b4567#findElement_E7045_5344b820ae2015d61e0b4ab7_0

Автор: _zorn_ 9.4.2014, 07:13
Цитата(igorold @  9.4.2014,  14:01 Найти цитируемый пост)
Чтобы твой код срабатывал не один раз, тебе надо сделать что-то типа

Какой то бред. В вашем коде второй цикл выполнится два раза со значениями PinUrl и PinUrlID из первой записи.

Чтобы код ТСа заработал так как предполагается, нужно добавить mysql_data_seek(0,$rows2) после второго цикла. Но все равно это ###код  smile 

Автор: igorold 9.4.2014, 13:28
Вы хоть поняли, что я написал?
ТС хочет выполнить первый цикл и чтобы внутри него каждый раз перебирался второй цикл, а не 1 раз как он пишет.
Моё предложение это реализовывает. В чем проблема?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Выборка-из-2-баз-данных-id534464bcae2015fa6e8b4567#findElement_E7045_534520b4ae2015176f0b4a28_0

Автор: krypt3r 9.4.2014, 13:55
Цитата

Код

$rows = mysql_query("SELECT PinName, PinID FROM `Pineral`");
$rows2 = mysql_query("SELECT PinUrl, PinUrlID FROM `Pineralurl`");


И где тут выборка данных из _разных_ баз данных?

Автор: Dima85 9.4.2014, 22:37
_zorn_, предложил замечательную конструцию, уже использую ее в других задачах, но для это задачи нужно немного другое. Ваш скрипт не покажет текст с первой базы если его нет во второй. Мне же нужно показывать текст с первой базы всегда. И если во второй базе есть совпадения то показать его тоже. 


igorold, такой код:
Код

$rows = mysql_query("SELECT PinName, PinID FROM `Pineral`");
$rows2 = mysql_query("SELECT PinUrl, PinUrlID FROM `Pineralurl`");
$list = mysql_fetch_array($rows2);
while ($stroka = mysql_fetch_array($rows)){
    $i=$stroka['PinID'];
    echo'<tr><td>' . $stroka['PinName'] . '</td>';
//while ($stroka2 = mysql_fetch_array($rows2)){
    foreach ($list as $stroka2) {

    if ($i == $stroka2['PinUrlID']) {
        echo'<td>' . $stroka2['PinUrl'] . '</td></tr>';
    }
}
}


Ругается на 
Код

Warning: Illegal string offset 'PinUrlID' in C:\xampp\htdocs\index2.php on line 81

Подскажите пожалуйста почему?

Автор: _zorn_ 10.4.2014, 03:51
Цитата(igorold @  9.4.2014,  21:28 Найти цитируемый пост)
Моё предложение это реализовывает. В чем проблема?

Да ладно  smile Давай на пальцах.
Код

$rows2 = mysql_query("SELECT PinUrl, PinUrlID FROM `Pineralurl`");
$list = mysql_fetch_array($rows2);
//$list теперь массив такого вида $list = array('PinUrl'=>'значение PinUrl из первой записи Pineralurl', 'PinUrlID'=>'значение PinUrlID из первой записи Pineralurl');
foreach ($list as $stroka2)
//выполняется 2 раза в первый раз в $stroka2 'значение PinUrl из первой записи Pineralurl', второй раз 'значение PinUrlID из первой записи Pineralurl'

Может стоит покурить ман хотя бы на функцию mysql_fetch_array, не ?
Цитата(Dima85 @  10.4.2014,  06:37 Найти цитируемый пост)
Мне же нужно показывать текст с первой базы всегда.

Цитата(_zorn_ @  9.4.2014,  11:27 Найти цитируемый пост)
Если нужно, чтобы попадало - кури LEFT JOIN

Код

SELECT * FROM Pineral LEFT JOIN Pineralurl ON Pineral.PinID=Pineralurl.PinUrlID

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)