MySQL sorgu phpmyadmin çalışır ancak hiçbir satır PHP sonuç kümesi döndürdü

2 Cevap php

Ben şu MySQL sorgusu vardır:

SELECT SQL_CALC_FOUND_ROWS p.*
FROM product AS p
LEFT JOIN productCategory AS c ON FIND_IN_SET(c.id, REPLACE(TRIM(p.categories), ' ',','))
WHERE (
    c.id IS NULL
    OR c.status = 'D'
    OR p.categories IS NULL
    OR TRIM(p.categories) = ''
)
AND p.deprecated = 'N'
LIMIT 0,30

Bu sorgu, hangi ürünleri almak için:

  • Şey p.categories sütununda, ancak satır productCategory tablo yoksa üzerinde belirledi
  • Bir productCategory satır var, ama productCategory satırda durum 'D' ayarlanır
  • Hiçbir şey p.categories sütununda belirledik

p.categories boşluk ayrılmış sayısal değerler productCategory masaya kimlikleri temsil eden bir satır. Değil iyi tasarım, verilmiş ama ben bu görevi verilmiş, bu yüzden bunu yapmanın bir yolunu bulmalıyız olmuştur.

PHP kodu, bu sorgu doğrudan sonradan yürütülür:

SELECT FOUND_ROWS() as count

Phpmyadmin çalıştırıldığında, ben satır binlerce döndü ve ben ikinci sorgusu, ben satır sayısının doğru bir sayım değerini almak olsun. I mysqli_query () aracılığıyla aynı ilk sorguyu çalıştırdığınızda, ben hiç döndürülen satır almak ve aşağıdaki sorgu 1 sayısını verir.

Phpmyadmin ve benim PHP kodu İkisi aynı veritabanına bağlanıyorsunuz.

Herkes neyin yanlış gittiğini görebiliyor musun?

Update:

Ben sadece bu nedenle ilk seçtikten sonra SQL_CALC_FOUND_ROWS, sonraki sorguda, ben bu toplam ne olacağını bir sayımını almalısınız, büyük bir toplam var olabilir çünkü ilk 30 satır geri istiyorum.

2 Cevap

Nedense, sorgunun ilk satırını değiştirerek:

SELECT SQL_CALC_FOUND_ROWS p.*

Için:

SELECT SQL_CALC_FOUND_ROWS p.id

Ve sonra ben ayrı sorgu her bir satırındaki gerekli verileri sonra oldu sonuç var elde sonuçları döngü.

Sen sadece PHP döndü rekor seti almak için ilk sorguyu gerçekleştirmek gerekir. Bunu aldıktan sonra size PHP sayabilirsiniz. Sen PHP, MySQL Zincirleme sorguları vermemelisiniz.

yani

$result = mysql_query($query);
$recordCount = mysql_num_rows($result);