Как запросить выбор всех моих строк mysql при модификации хранимой функции с помощью алгоритма на основе Reddit?

Я потратил целый день на гугление, удаление и вставку, пытаясь реализовать этот код. Я пытался реализовать сайт, похожий на Reddit, с использованием php и mysql. Я следил за другим вопросом: PHP MYSQL Query Algorithm Help и это работает очень хорошо и ранжирует строки в соответствии с алгоритмом, закодированным в предыдущем вопросе в myphpadmin, когда я запрашиваю хранимую функцию

SELECT
*,
reddit_rank(`time_added`, `up_votes`, `down_votes`) as rank
FROM
`table`
ORDER BY
rank;

, но когда я вставляю запрос в свой файл php:

<?php 
include("config.php");
$q= "SELECT *,reddit_rank(`time` , `votes_up` , `votes_down`) FROM `wallposts` ORDER BY rank LIMIT 0 , 30";
$r = mysql_query($q);
if(mysql_num_rows($r) > 0) {
while($row = mysql_fetch_assoc($r)){
...?>

Это не работает, и я получаю белый HTML-экран. Так, например, в моем PHP, когда у меня есть

$q = "SELECT * FROM wallposts ORDER BY votes_up DESC"; 

моя стена, похожая на reddit/facebook, добавила каждую из моих строк из mysql, и все работает просто отлично. но когда я меняю его на

$q= "SELECT *,reddit_rank(`time` , `votes_up` , `votes_down`) FROM `wallposts` ORDER BY rank LIMIT 0 , 30"; 

веб-страница не возвращает ничего, кроме белого экрана, хотя я знаю, что это работает в myphpadmin.

Что-то не так с моим синтаксисом или невозможно запросить select all с сохраненной функцией, чтобы упорядочить результаты в php?


person tjones    schedule 12.01.2012    source источник
comment
Вам нужно будет лучше определить, что не работает. Вы получаете сообщение об ошибке? Это приводит к другим результатам, чем вы ожидаете?   -  person Devon_C_Miller    schedule 12.01.2012
comment
Спасибо, Девон, за то, что подтолкнул меня к ясности. Я имею в виду, что выхода нет. Так, например, в моем PHP, когда у меня есть $q = SELECT * FROM wallposts ORDER BY voices_up DESC; все работает просто отлично. но когда я меняю его на $q= SELECT *,reddit_rank(time, votes_up, votes_down) FROM wallposts ORDER BY rank LIMIT 0, 30; веб-страница не возвращает ничего, кроме белого экрана.   -  person tjones    schedule 12.01.2012
comment
Попробуйте добавить try ... catch вокруг запроса и выборки для обработки любых исключений и вывести значение mysql_num_rows($r), чтобы увидеть, получаете ли вы что-нибудь в ответ.   -  person Devon_C_Miller    schedule 12.01.2012
comment
Похоже, что в таблице нет значений или, что более вероятно, таблица не обнаружена. Но там наверняка есть таблица и значения, уверяю вас.   -  person tjones    schedule 12.01.2012
comment
В вашем исходном SQL у вас есть reddit_rank(...) as rank, но в php as rank отсутствует. Я ожидаю, что из order by rank будет ошибка, так как в выборе нет rank.   -  person Devon_C_Miller    schedule 12.01.2012


Ответы (1)


Я думаю, что нашел решение, создав представление, а затем запросив это представление вместо исходной таблицы. После того, как я запросил сохраненную функцию в myphpadmin:

SELECT
*,
reddit_rank(`time_added`, `up_votes`, `down_votes`) as rank
FROM
`table`
ORDER BY
rank; 

Затем я создал представление после того, как эти результаты были возвращены. Затем вместо того, чтобы запрашивать то же самое в моем файле PHP, я запросил новое представление mysql с помощью:

SELECT * FROM [view] ORDER BY rank

Вуаля!

person tjones    schedule 12.01.2012