Всем привет! У меня стоит задача - вывести значения нескольких таблиц одновременно. У меня есть например 3 таблицы: Код (Text): Табл.1: category name price 1 товар1 123 1 товар2 555 1 товар3 21 2 товар4 98 2 товар5 444 3 товар6 5 3 товар7 98 3 товар8 40 Табл.2: category name price 1 товар1 11 1 товар2 22 2 товар3 31 2 товар4 456 3 товар5 32 4 товар6 56 4 товар7 87 4 товар8 987 Табл.3: category name price 1 товар1 7654 2 товар2 56 2 товар3 656 3 товар4 55 4 товар5 25 5 товар6 3465 5 товар7 234 5 товар8 40 Мне надо сделать сравнительный вывод цен этих трех таблиц например по категории 1, т.е. ожидается такая структура вывода: Код (Text): Название товар1 товар2 товар3 ... ... Табл.1 123 555 21 Табл.2 11 22 -- Табл.3 7654 -- -- Для этого как я понимаю, мне надо сначала вытащить названия всех таблиц из текущей бд: PHP: <?php $result = mysql_list_tables("db_name"); while ($table_data = mysql_fetch_row($result)) { // echo $table_data[0]."<br>"; $shop[] = $table_data[0]; } ?> а потом просто подставить поочереди в цикл с выводом собственно цен: PHP: <?php foreach ($shop as $k => $v) { // echo $k." - ".$v."<br>"; $sql = mysql_query("SELECT name, price FROM '".$v."' WHERE category = 1", $link_id); while ($sql_data = mysql_fetch_array($sql)) { echo $sql_data."<br>"; } } ?> Но такой вариант не работает, а точнее проблема (из текста сообщения ошибки) кроется в подстановке имени таблицы в цикле, из которой надо вывести данные. Помогите пожалуйста решить эту проблему...
iliavlad - спасибо, помогло. Теперь все работает, но при этом всем мне почему-то выводит ошибку перед результатом - ссылаясь на вот эту строчку - PHP: <?php ... $sql = mysql_query("SELECT name, price FROM '".$v."' WHERE category = 1", $link_id); ... ?> НО ПРИ ЭТОМ КОД ВЫПОЛНЯЕТ СВОЮ РАБОТУ...
тут только гадать. убирайте строчки по одной, смотрите, после убирания которой ошибка пропадёт. а то может она вообще не в этом файле.
разобрался, у меня помимо этих таблиц есть еще одна с категориями (другая структура и данные), вот он мне и ругался на эту таблицу. Я ее исключил и все стало гуд. Теперь я могу вытащить все данные из всех таблиц за 2 цикла. Но вот как эти данные собрать и вывести в одной сводной таблице ума не приложу, может предложите что путное... В первом посте я немного не правильно расписал итоговую таблицу, там посложнее структура: Код (Text): Название | товар1(табл.1) | товар2(табл.1) | товар3(табл.1) | товар1(табл.2) | товар2(табл.2) | товар3(табл.2) --------------------------------------------------------------------------------------- фирма1 | цена_тов1(табл.1) | цена_тов2(табл.1) | цена_тов3(табл.1) | цена_тов1(табл.2) | цена_тов2(табл.2) | цена_тов3(табл.2) --------------------------------------------------------------------------------------- фирма2 | цена_тов1(табл.1) | цена_тов2(табл.1) | цена_тов3(табл.1) | цена_тов1(табл.2) | цена_тов2(табл.2) | цена_тов3(табл.2) Имена товаров в каждой таблице свои, имена таблиц - это названия фирм. Суть этой таблицы - сравнение оригинальных товаров с их аналогами. Вооще такое можно сделать или все надо ручками набивать эту таблицу?
выведи var_dump($sql) и посмотри что тебе возвращается. Скорее всего, в базе есть таблицы кроме этих трех и в одной из этих добавочных таблиц нет поля name или price. Поэтому один из запросов возвращает вместо результата ошибку, а ты пытаешься ее фетчить и естественно получаешь варнинг.
так ручками и можно попробовать пару раз. когда будет ясен алгоритм работы, можно будет и автоматизировать.