BFG13 Написал:PHP код:
<?php
$sql = "SELECT s.*, w.name, w.price AS work_price, [ тут все остальные поля из w ]
FROM works_sales AS s
LEFT JOIN works AS w ON (s.work = w.id)
WHERE s.user = " . $id . "
ORDER BY s.date DESC";
множеству полей w.* не присвоишь одно имя work_price, но если конкретное поле w.price то будет работать.
P.S. конкатенировать значения в запрос - зло великое (не повторяйте такое дома). пользуемся prepared statement и забываем про sql injection
Выполнение каких-либо операций по фильтрованию результата, которые можно вынести в запрос - тоже зло. Представьте себе если в таблице 1000000 записей и они будут обрабатываться этим:
Код:
$works = $query->result();
$result = array();
foreach($works as $work)
if(!empty($work->name))
$result[] = $work;
return $result;
Добавьте эту проверку на w.name != "" в WHERE и уберите цикл-фильтр
поле price имеется как в таблице work так и в таблице work_sales но я как понимаю этим запросом я вытаскиваю все из таблицы work_sales так как это должны отображаться купленные товары. Вопрос только как исправить все это?
BFG13 Написал:поле price имеется как в таблице work так и в таблице work_sales но я как понимаю этим запросом я вытаскиваю все из таблицы work_sales так как это должны отображаться купленные товары
На практике использовать * (все поля etc.) стоит только в простейших SELECT запросах. Во всех остальных случаях не ленитесь писать полный список (нужных) полей. Это избавит от проблем после рефакторинга и возможных изменений имен полей и коллизий.
Для отладки запросов пользуйтесь консолью либо explain в Navicat или любого другого GUI к MySQL.