php
  • mysql
  • limit
  • 2017-02-25 74 views 0 likes 
    0

    我有一個生成webshop佈局的php文件。問題是當我開始將產品拆分爲頁面時。我在產品數據庫中運行以下查詢,可以找到各種產品。有一個prodducttype列指定應該在哪個菜單下顯示。 查詢帶限制顯示少一個元素的MySql查詢

    $sql = "SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
    producttype = '".$GLOBALS["useableproductid"]."' LIMIT ".($start- 1).",".$stop; 
    

    有一排總是缺 我使用的回聲只是運行前顯示查詢它的下面:

    SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
    producttype = 'laptop' LIMIT 0,8 
    

    簡單說一下數據庫: 目前3種產品筆記本電腦,耳機,臺式機。 顯示便攜式計算機時,它們來自ID 1- 17,缺少ID = 1。來自ID 18-22和ID = 21的耳機丟失。缺少ID 23-27和ID = 23的桌面。總是缺少相同的產品。

    的顯示方法是:

    while($row = $result->fetch_assoc()){ 
    echo $row["nm"]; //just an example echo in the code it gets displayed with design 
        ... 
    } 
    

    感謝您對所有的答案!

    +2

    請注意,沒有ORDER BY的LIMIT是相當無意義的,並且名稱如c1640644的表往往是設計不良的症狀 – Strawberry

    +0

    我會按順序執行謝謝! c1640644是因爲它是一個大學服務器,其中c1640644是我的學號。 –

    +0

    啊,夠公平的,然後 – Strawberry

    回答

    1

    觀察到的行爲('laptop'的「缺失」行和'headphone'的「缺失」行)的最合理的解釋是行不滿足謂詞,與producttype的等同性比較。 (這是假設有少於$stop-$start行被返回。

    我驗證producttype的值。

    SELECT producttype, COUNT(1) 
        FROM c1640644.products 
    GROUP BY producttype 
    ORDER BY producttype 
    

    是計數返回等於你期望返回的行數呢?特別是,我會尋找那些在視覺上接近「筆記本電腦」的價值觀,但並不能滿足一個平等的比賽,如'laptop ultra-portable',或'lapt0p'。這些值並不能滿足一個平等的比較'laptop'


    如果沒有ORDER BY子句,MySQL可以按任意順序自由返回行。帶有LIMIT子句的查詢的結果是不確定的。含有LIMIT 0,8LIMIT 8,16的查詢可能包含相同的行。也可能會「跳過」一行。

    如果情況是總是有「缺少一行」,我懷疑在循環之前有一個提取。問題中顯示的循環看起來是正確的。也有可能nm列包含一個空字符串,並且它看起來像一行被「跳過」。對於調試,請考慮將echo "row fetched";作爲循環內的第一行。或者在循環$i=0;之前初始化一個計數器變量,然後在循環內部,將$i$i增加到調試輸出中的字符串中。

    相關問題