Jag förstår inte varför COUNT(*) ger olika resultat

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
kungmats



Medlem i: 6264 dagar
Från: Falun
Status: Offline



#742606
Inlägg Skrivet: 2019-07-08 07:10      Ämne: Jag förstår inte varför COUNT(*) ger olika resultat Citera

Hej

Jag behöver egentligen ingen kodhjälp med detta men gärna en förklaring varför den ena varianten fungerar och den andra inte.

Jag använder den översta varianten på många sidor och funktioner och det fungerar alldeles utmärkt och generar rätt resultat, men helt plötsligt på en ny sida fungerar det inte att göra så.
Det returnerar "1" fast ingen träff finns.
KOD:
1:
$finns = mysqli_num_rows(mysqli_query($open_guard, " SELECT COUNT(*) FROM customers WHERE customer_key = '$customer_key' "));


Om jag gör så här fungerar det
KOD:
1:
$result = $open_guard->query(" SELECT COUNT(*) FROM customers WHERE customer_key = '$customer_key' ");
2:
$row = $result->fetch_row();
3:
$finns = $row[0];
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
LimpanDSS



Medlem i: 2669 dagar
Från: Stockholm
Status: Offline



#742607
Inlägget är accepterad som det rätta svaret Skrivet: 2019-07-09 15:19      Ämne: Citera

COUNT(*) är i sig en rad i resultatet, så oavsett om

COUNT(*) = 0
COUNT(*) = 1

eller

COUNT(*) = 10

så kommer frågan alltid returnera ett svar. D.v.s antalet matchningar i frågan. 0 är också ett svar.

num_rows säger hur många svarsrader du fick i ditt svar, men eftersom COUNT(*) bara är en rad så kommer num_rows returnera 1 oavsett vad COUNT(*) består av för nummer.
 

_________________
Github
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
kungmats



Medlem i: 6264 dagar
Från: Falun
Status: Offline



#742609
Inlägg Skrivet: 2019-07-12 18:36      Ämne: Citera

Tack för ditt svar, men varför fungerar den kortare varianten på en del andra sidor?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
LimpanDSS



Medlem i: 2669 dagar
Från: Stockholm
Status: Offline



#742610
Inlägget är accepterad som det rätta svaret Skrivet: 2019-07-12 23:55      Ämne: Citera

Din $finns variabel kommer alltid att vara sann eftersom (num_rows = 1) == true. Så i de fallen där det fungerar så är COUNT(*) > 0, vilket gör att du får det eftertraktade resultatet (eftersom ett tal > 0 är == true). Det är alltså bara en tillfällighet att det fungerar.

Hade COUNT(*) = 0 så hade $finns fortfarande visat true, vilket förstås är fel.
 

_________________
Github
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
kungmats



Medlem i: 6264 dagar
Från: Falun
Status: Offline



#742657
Inlägg Skrivet: 2019-09-18 10:09      Ämne: Citera

Tack för feedback!
Jag såg ditt svar först idag ... sorry!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic