За последние 24 часа нас посетили 29837 программистов и 1759 роботов. Сейчас ищут 933 программиста ...

как обратьться к двум таблицам?

Тема в разделе "PHP и базы данных", создана пользователем oksana, 20 мар 2012.

  1. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    К примеру человек заходит на сайт заполняет форму для объявления
    Слева находится доска объявлений:

    ТУФЛИ (0)
    ПЛАТЬЯ (0)
    и т.д.

    вопрос как подсчитать количество туфлей или платьев в таблице (посчитать знаю как, проблема в переменной)?

    таблица 1: в ней два поля id и categor (туфли, платья и т.д) вывожу их циклом, все прекрасно и по нажатию на любую категорию в цикле выводит что надо

    таблица 2: в ней находится объявления name, text, prise, phone, categor
    выборка ("SELECT name, text, prise, phone, categor FROM table2 WHERE categor='$categor'") - где $categor из первой таблицы

    Не могу понять как сделать выборку для первой таблицы ("SELECT * FROM table WHERE id='$id'")
    Как узнать $id?
    Или как лучше сделать выборку?
     
  2. derkien

    derkien Активный пользователь

    С нами с:
    21 фев 2012
    Сообщения:
    7
    Симпатии:
    0
  3. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    Ок, сегодня как освобожусь прочитаю =)
     
  4. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    SELECT ИМЯ_ТАБЛИЦЫ.ИМЯ_ПАРАМЕТРА WHERE ИМЯ_ТАБЛИЦЫ2.ИМЯ_ПАРАМЕТРА=бла бла бла
     
  5. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    Там не так все просто твой вариант не получился.

    igordata and Ganzal где вы отзовитесь?
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Вариант который предложил fessnecro не подошел???

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

    Сделайте связь между таблицами по ID т.е. в таблице 2 categor ссылается на ID из первой таблице, обычно так делают.
    Напишите понятно какую выборку вы хотите, что бы посчитать количество туфлей используйте
    ("SELECT count(*) FROM table WHERE id='$id'")
     
  7. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    SELECT table1.categor WHERE table2.categor1='categoria' выдает ошибку
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Подробней что за ошибка и где FROM???
     
  9. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    опишу проблему:

    захожу на сайт есть доска объявлений пользователей

    ТУФЛИ (12)
    АКСЕССУАРРЫ (5)
    и т.д

    эту доску вывожу циклом
    $db = mysql_connect("localhost", "php", "12345"); mysql_select_db("test", $db);

    $result = mysql_query("SELECT id, categor FROM table1", $db);
    $myrow = mysql_fetch_array($result);

    do{
    printf("
    <table>
    <tr>

    <td><a href='блабла.php?id=%s'>%s</a></td><td>(0)</td>

    </tr>
    </table>", $myrow["id"], $myrow["categor"])
    }
    while($myrow = mysql_fetch_array($result));

    Вопрос как подсчитать количество туфлей или аксессуаров ( <td>(0)</td> и как вставить сюда ) во второй таблице (table2)
    вот некоторые поля name, gorod, adress, phone, categor
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Можно такой SQl

    SELECT table1.id, table1.categor, count(table2.categor) FROM table1, table2 WHERE table1.id = table2.categor GROUP BY table2.categor

    Забыл что у вас table2.categor равняется table1.categor

    Исправте на
    SELECT table1.id, table1.categor, count(table2.categor) FROM table1, table2 WHERE table1.categor = table2.categor GROUP BY table2.categor
     
  11. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    сейчас попробую =)

    Добавлено спустя 52 минуты 4 секунды:
    "SELECT table1.categor, count(table2.categor) FROM table1, table2 WHERE table1.categor = table2.categor GROUP BY table2.categor"

    выводит почему то данные из первой таблицы как будто там "SELECT * FROM table1"

    Решила поменять местами

    "SELECT table2.categor, count(table1.categor) FROM table2, table1 WHERE table2.categor = table1.categor GROUP BY table2.categor"
    и так
    "SELECT table2.categor, count(table1.categor) FROM table2, table1 WHERE table2.categor = table1.categor GROUP BY table1.categor"
    и так
    "SELECT table2.categor, count(table1.categor) FROM table1, table2 WHERE table2.categor = table1.categor GROUP BY table2.categor"
    выдает
    mysql_fetch_array(): supplied argument is not a valid MySQL result resource

    Что еще можно исправить?
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Странно SQL должен быть правильным я сам его проверял...

    А что пишет mysql_error() ?
     
  13. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    в принципе первый вариант работает но почему выдает первую таблицу а не вторую не понятно сто раз перепроверила
    mysql_error(): supplied argument is not a valid MySQL-Link resource in Z:\home\localhost\

    мне нужно как тут на форуме категория и справа количество тем (но вот как сделать запрос?)
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Так уточнение в таблице table1 в поле categor названия категорий ТУФЛИ и т.д.
    В таблице table2 товары, цена и в categor названия категории.

    Если так то sql выведет название категорий из таблицы table1 и количество товаров по каждой категории из таблицы table2, на счет ошибки проверте подключение к базе
     
  15. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    попробую проверить =)

    Добавлено спустя 12 минут 38 секунд:
    подключение к базе работает!
    весь SQL написала как вы сказали "SELECT table1.categor, count(table2.categor1) FROM table1, table2 WHERE table1.categor = table2.categor1 GROUP BY table2.categor1", но
    echo $myrow["categor"]; выдает туфли и т.д все ок
    echo $myrow["categor1"]; выдает пустоту. Непонятно синтаксис в порядке. Может запрос как то по другому надо сделать?
     
  16. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Мда а я вот думаю в чем же проблема :)

    categor1 нет такого поля есть поле count(table2.categor1) но так писать не удобно исправте на

    SELECT table1.categor, count(table2.categor1) AS total FROM table1, table2 WHERE table1.categor = table2.categor1 GROUP BY table2.categor1

    вместо total можно написать что тебе удобней и обращайся $myrow["total"]
     
  17. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    Алилуя, вроде все работает =) огромное спасибо но такая маленькая пролема в доске выводятся категории в которых есть объявления а если в категории объявлений нет то не выводит. Что делать?
     
  18. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    smitt где же вы? =(
     
  19. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну сидеть целый день на форуме не могу :)

    Попробуй этот sql

    Код (Text):
    1. SELECT table1.id, table1.categor, count(table2.categor) AS total FROM table1 LEFT JOIN table2 USING(categor)
    2. GROUP BY table2.categor
     
  20. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost

    mysql_error(): supplied argument is not a valid MySQL-Link resource in Z:\home\localhost

    Увы не получилось =( , может еще варианты?
     
  21. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
  22. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Не перестаю удивляться откуда ты берешь все эти ошибки...

    SQL я проверял он работает правильно если нет товаров в категории то в total будет 0.

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

    Может повторишь то же самое :)
     
  23. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    Ок, шас проверю =) но вроде точно проверяла

    Добавлено спустя 6 минут 1 секунду:
    Честно все проверила но нет, может настройки денвера не те?

    Добавлено спустя 2 минуты 41 секунду:
    в статье кое что нашла шас проверю =)

    Добавлено спустя 8 минут 17 секунд:
    SELECT table1.id, table1.categor, count(table2.categor1) AS total FROM table1 LEFT JOIN table2 ON table1.categor = table2.categor1 GROUP BY table2.categor1

    просто у меня были categor и categor1, но еще одна проблема в цикле выводятся все категории в которых есть объявления и только одна категория без объявлений а их больше =(. Что теперь?
     
  24. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Мда пардон за sql, написал по быстрому тот запрос, не добавил там дополнительное поле
    исправленная версия тут

    Код (Text):
    1. SELECT table1.id, table1.categor, count(table2.categor) AS total FROM table1 LEFT JOIN table2 USING(categor)
    2.             GROUP BY table2.categor, table1.categor
     
  25. oksana

    oksana Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    может вы как то пропустили =) у меня table1.categor и table2.categor1

    SELECT table1.id, table1.categor, count(table2.categor1) AS total FROM table1 LEFT JOIN table2 USING(categor) GROUP BY table2.categor, table1.categor тут по логике ошибка так и есть

    прочитала статью и сделала вот так
    SELECT table1.id, table1.categor, count(table2.categor1) AS total FROM table1 LEFT JOIN table2 ON table1.categor = table2.categor1 GROUP BY table2.categor, table1.categor
    И все заработало =)))))))))))))))) Ура, а вам большое спасибо за то что вы есть!