2012-05-15 4 views
0

Это мой запрос, чтобы получить информацию о модели из одной таблицы и одного изображения из другой таблицы. Какие изменения я должен внести в этот запрос, чтобы получить изображение, где ORDER BY сортирует DESC? В таблице изображений есть поле под названием «sort». Значение по умолчанию для поля для каждой строки равно 0. Но одна случайная строка имеет значение 1. Я хочу получить эту конкретную строку. Однако я не хочу использовать WHERE sort = 1, потому что тогда даже в случае, когда ни одна строка не имеет значение сортировки 1, одна строка все равно должна быть извлечена.php mysql inner join - получить определенную строку

$sql="SELECT tc.id,tc.alias,tc.firstname,tci.imagename 
      FROM ".$pre."models tc 
      INNER JOIN ".$pre."model_images tci ON tc.id=tci.userid 
      WHERE activated=1 AND sex=$sex AND city=$city AND published=1 
      GROUP BY tc.id ORDER BY firstname ASC"; 

Заранее спасибо!


решаемые с помощью:

SELECT tc.id,tc.alias,tc.firstname, 
    (SELECT imagename FROM ".$pre."model_images WHERE userid= tc.id 
    ORDER BY sort DESC LIMIT 1) AS imagename 
    FROM ".$pre."models tc 
    WHERE tc.activated=1 AND tc.sex=1 AND tc.city=2 AND tc.published=1 
    ORDER BY tc.firstname ASC 
+3

'WHERE sort = 1' –

+0

Вопрос обновлен. Извините за путаницу. – salmanhijazi

+0

'ORDER BY сортировать DESC, имя ASC'? – billyonecan

ответ

0

Вы должны поместить, что в вашем выражении WHERE Aswell. Следует обратить внимание на то, что следует обратить внимание на то, как вы используете имена столбцов. Лучше сказать, к какой таблице они принадлежат.

Так что:

WHERE activated=1 AND sex=$sex AND city=$city AND published=1 

Должно быть:

WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 

А потом просто добавить столбец 'сортировки' к нему:

WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 AND tci.sort=1 

Если результаты не будут возвращены, то убедитесь, что есть записи, соответствующие требуемым условиям. Потому что нет ничего плохого в запросе. Попробуйте распечатать свой запрос на экране и т. Д., Чтобы узнать, имеет ли значение всех переменных.

редактировать:

Вы должны потерять GROUP BY.

SELECT tc.id,tc.alias,tc.firstname,tci.imagename 
FROM ".$pre."models tc 
INNER JOIN ".$pre."model_images tci ON tc.id=tci.userid 
WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 AND tci.sort=1 
+0

Я обновил вопрос. Можете ли вы отредактировать соответствующим образом? Спасибо! – salmanhijazi

+0

Тогда у меня будет несколько порядков: GROUP BY tc.id ORDER BY firstname ASC. Как мне это сделать? – salmanhijazi

+0

@salmanhijazi Не уверен, что вы действительно пытаетесь сделать. Ваша GROUP BY ошибочна. MySQL по умолчанию допускает неправильные запросы, такие как GROUP BY. Вы группируете tc.id. Я предполагаю, что вы первичный ключ? Вы не можете группировать то, что всегда уникально. --- Но если это не уникально, вы можете показывать только столбец, который вы указали в своей GROUP BY, и некоторую дополнительную информацию с SUM(), AVG() и т. Д. Вы не можете просто поместить любой столбец в свой SELECT, когда используя GROUP BY. Трудно помочь вам, не зная точно, что вы делаете, и почему вы пытаетесь объединить свои результаты. – w00